Я новичок в ядре EF, и у меня возникает проблема, когда я пытаюсь сделать следующее.
У меня есть бизнес-логика, которая фильтрует кофе по цене:
if(request.MoreThen != null)
{
query = query.Where(c =>
c.Prices
.OrderByDescending(p => p.CreatedAt)
.First()
.Price
>= request.MoreThen);
}
И все работает хорошо. Однако, когда я пытаюсь извлечь эту функцию в частный метод, я получаю, что отношение Prices
равно нулю.
Теперь у меня есть несколько мест, где мне нужна последняя цена, вот второе, если:
if(request.MoreThen != null)
{
query = query.Where(c =>
c.Prices
.OrderByDescending(p => p.CreatedAt)
.First()
.Price
>= request.MoreThen);
}
Я считаю, что это совсем не СУХОЙ, поэтому я хотел извлечь извлечение цены в частный метод, например так:
private decimal GetPrice(Coffee model)
{
return model.Prices
.OrderByDescending(p => p.CreatedAt)
.First()
.Price
}
Однако теперь, когда я подставляю запрос:
query = query.Where(c => GetPrice(c) <= request.LessThen)
Я получаю странную ошибку, и в отладчике присутствует каждое поле , за исключением Включено . (Обратите внимание, что я вызвал метод .Include
).
Полный пример кода включен в мой открытый исходный код Проект на Github
РЕДАКТИРОВАТЬ: я использую Postgres в качестве движка базы данных, и код первый подход
Итак, мой вопрос: почему значение .Prices
равно нулю, хотя я включил их в начале метода?