У меня есть четыре класса Предложение, Раздел, Поле и Опция:
Если в предложении есть разделы, и в каждом разделе есть несколько полей, и у каждого поля есть несколько параметров, как показано:
public class Offer
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Section> Sections { get; set; }
}
public class Section
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Field> Fields { get; set; }
}
public class Field
{
public int Id { get; set; }
public string Type { get; set; } //[question, group]
public ICollection<Option> Options { get; set; }
}
public class Option
{
public int Id { get; set; }
public string Name { get; set; }
}
Я пытался получить предложение по идентификатору, включая вложенные сущности, и этот код отлично работает:
var offer = _context.Offers
.Include(o => o.Sections
.Select(s => s.Fields
.Select(f => f.Options)))
.FirstOrDefault(o => o.Id == offerId);
Проблема заключается в том, что я пытаюсь отфильтровать поля по типу следующим образом:
var offer = _context.Offers
.Include(o => o.Sections
.Select(s => s.Fields.Where(f => f.Type == "question")
.Select(f => f.Options)))
.FirstOrDefault(o => o.Id == offerId);
и я получаю эту ошибку:
Выражение «Включить путь» должно ссылаться на свойство навигации, определенное для типа. Используйте пунктирные пути для ссылочных свойств навигации и оператор Select для свойств навигации коллекции. Имя параметра: путь
Я рассмотрел множество вопросов и до сих пор не могу этого достичь: (
Linq: запрос с тремя вложенными уровнями
EF LINQ включает в себя вложенные сущности [дубликаты]
Использование LINQ для запроса трех прав. - Включение выражения пути должно ссылаться на свойство навигации, определенное для типа