Я пытаюсь вернуть список объектов. Этот объект имеет свойство 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.
Для меня это выглядит так, что ваш класс детей не находится в вашей модели сущности. Поэтому EF не может перевести его на действительный Sql. Итак, я вижу два параметра: Добавьте таблицу детей в модель и ваши запросы должны работать ИЛИ Вызовите .ToList() на своих родителях, а затем вы можете запросить с помощью Linq2Objects. – Dannydust
Извините, если я не был ясен, классы родителя и ребенка наверху - это мои сущности, поэтому Ребенок находится на родительском объекте как IEnumerable. Разве вы не имеете в виду что-то еще, чего я не получаю? –
Используете ли вы код EF Сначала вы создали модель из существующей базы данных? – Dannydust