Я в настоящее время борется запрос Linq для моего приложения с помощью Entity Framework (6.1.3)заказа не работает в Entity Framework запроса
запрос является следующим:
var productPeriods = (from pp in ctx.ProductPeriods
where pp.IsActive && pp.Product.IsBuyBackForProduct == null && !pp.Product.ProductAddOns.Any() && pp.PowerRegionID == powerRegionId
select new
{
ProductPeriod = pp,
Price = pp.Prices
.OrderByDescending(x => x.Created)
.GroupBy(x => x.FirmID)
.Select(pr => pr.FirstOrDefault())
.OrderByDescending(x => x.ProductPrice)
.FirstOrDefault()
}).ToList();
Цель этого запрос заключается в том, чтобы найти самую последнюю цену из коллекции цен периода продукта, сгруппированную по идентификатору фирмы, а затем выбрать лучшую цену последних цен от каждой фирмы.
Это прекрасно работает в Linqpad, но первый OrderByDescending(x => x.Created)
не работает при использовании в контексте Entity Framework.
Кто-нибудь знает почему? И, возможно, есть решение для этого? :-)
Заранее благодарен!
Update
Спасибо за все ответы. Я попробовал следующее:
select new {
ProductPeriod = p,
Price = p.Prices.GroupBy(x => x.FirmID).Select(pr => pr.OrderByDescending(x => x.Created).ThenByDescending(x => x.ProductPrice).FirstOrDefault())
}
Но, похоже, ThenByDescending(x => x.ProductPrice)
игнорируется, а также. Цены не сортируются правильно на выходе. Они выход, как это:
Price: 0,22940, Created: 06-03-2015 10:15:09,
Price: 0,23150, Created: 06-03-2015 10:05:48
Price: 0,20040, Created: 06-03-2015 09:24:24
Update 2 (решение на данный момент)
я пришел к решению, что первоначальный запрос возвращает только последние цены от каждой фирмы. В настоящее время существует три фирмы, поэтому производительность должна быть в порядке.
Позже в моем коде, где я на самом деле использую самую последнюю и лучшую цену, я просто делаю .OrderByDescending(x => x.ProductPrice).FirstOrDefault()
и проверяю, не является ли оно нулевым.
т.е:
var productPeriods = (from pp in ctx.ProductPeriods
where pp.IsActive && pp.Product.IsBuyBackForProduct == null && !pp.Product.ProductAddOns.Any() && pp.PowerRegionID == powerRegionId
select new
{
ProductPeriod = pp,
Prices = pp.Prices.GroupBy(x => x.FirmID).Select(pr => pr.OrderByDescending(x => x.Created).FirstOrDefault())
}).ToList();
Позже в моем коде:
var bestPriceOfToday = period.Prices.OrderByDescending(x => x.ProductPrice).FirstOrDefault()
Есть ли исключения? – haim770
заказ, а затем группировка не сохранит заказ, особенно если вы переупорядочиваете. загляните в 'ThenByDescending()', чтобы сделать второй заказ – DLeh
Исключение не выбрасывается, но результаты неверны :-) Я обязательно посмотрю на вызов ThenByDescending. Большое спасибо! На стороне записки, я только что прочитал, что это ошибка в структуре сущности, может ли кто-нибудь подтвердить это? –