0

Я пытаюсь вернуть список объектов. Этот объект имеет свойство IEnumerable второго класса. Я пытаюсь отфильтровать этот дочерний список на основе условия.Фильтрация IEnumerable дочернего свойства

Есть классы:

public class Parent 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public bool Active { get; set; } 
    public virtual IEnumerable<Child> Children { get; set; } 
} 

public class Child 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public int ParentId { get; set; } 
    public int OtherId { get; set; } 
    public bool Active { get; set; } 
    public virtual Parent Parent { get; set; } 
} 

Здесь вы EF код, где я пытаюсь получить родитель и отфильтровать ребенок:

public IEnumerable<ParentViewModel> GetParents(int otherId) 
{ 
    var parents = _databaseContext.Parents 
     .Include(i => i.Children.Where(child => child.OtherId == otherId)); 

    return parents; 
} 

Когда я называю этот метод, я получаю ArgumentException, с сообщением:

The Include path expression must refer to a navigation property defined on the type. 
Use dotted paths for reference navigation properties and the Select operator for 
collection navigation properties. 

Учитывая, что исключение упоминается с использованием Select, я tr СВУ делает это тоже:

public IEnumerable<ParentViewModel> GetParents(int otherId) 
{ 
    var parents = _databaseContext.Parents 
     .Where(parent => parent.Active == true) 
     .Include(parent => parent.Children); 
     .Select(parent => new 
     { 
      Active = parent.Active, 
      Id = parent.Id, 
      Children = parent.Children 
       .Where(child => child.OtherId == propertyId) 
       .Select(child => new 
       { 
        Active = child.Active, 
        Id = child.Id, 
        ParentId = child.ParentId, 
        OtherId = child.OtherId, 
        Title = child.Title 
       }, 
      Title = parent.Title 
     }); 
    return parents; 
} 

Это также взрывается, давая мне исключение:

The specified type member 'Children' is not supported in LINQ to 
Entities. Only initializers, entity members, and entity navigation 
properties are supported. 

И вот где я все из идей! Я не знаю, что я делаю неправильно, но это не похоже, что это должно быть так сложно, как и было, поэтому я предполагаю, что мне не хватает чего-то очень фундаментального для Entity Framework.

+0

Для меня это выглядит так, что ваш класс детей не находится в вашей модели сущности. Поэтому EF не может перевести его на действительный Sql. Итак, я вижу два параметра: Добавьте таблицу детей в модель и ваши запросы должны работать ИЛИ Вызовите .ToList() на своих родителях, а затем вы можете запросить с помощью Linq2Objects. – Dannydust

+0

Извините, если я не был ясен, классы родителя и ребенка наверху - это мои сущности, поэтому Ребенок находится на родительском объекте как IEnumerable. Разве вы не имеете в виду что-то еще, чего я не получаю? –

+0

Используете ли вы код EF Сначала вы создали модель из существующей базы данных? – Dannydust

ответ

0

А, ок! Я не знаком с Code First (я использую сгенерированную модель в своем проекте), но я уверен, что EF не признает, что эти Сущности связаны. Сообщение об ошибке: «... и свойства навигации сущности поддерживаются» говорит мне, что вы должны определить свойство навигации (связь между этими объектами).

public class Parent 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public bool Active { get; set; } 
    public virtual ICollection<Child> Children { get; set; } 
} 

public class Child 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public int ParentId { get; set; } 
    public int OtherId { get; set; } 
    public bool Active { get; set; } 
    public int ParentId [get;set;} 
    [ForeignKey("ParentId")] 
    public virtual Parent Parent { get; set; } 
} 
+0

У меня есть контекст, настроенный вручную. Я поменял его на ICollection, но это не имеет никакого значения, я боюсь. –

+0

Привет, я обновил свой ответ и сменил классы, добавив аннотации данных и свойство. Если это не работает, можете ли вы разместить дизайн таблиц базы данных? – Dannydust

+0

Это не сработало. Я работал над этим на данный момент (у меня не хватило времени, чтобы исследовать это), но я вернусь к нему, поскольку я настроен заставить это работать! –

Смежные вопросы