LINQ У меня есть запрос LINQ, какпереключатель случай внутри
var tmp = (from t in db.sometable
where (bunch of conditions)
group t by new { t.somefield} into g
select new
{
Name = g.Key.someobject.Name,
xColor = g.Sum(a => (int?)a.LineItems.Where(m => m.Product == "x" && m.Color == true)
.Sum(m => m.Quantity)),
xBW = g.Sum(a => (int?)a.LineItems.Where(m => m.Product == "x" && m.Color == false)
.Sum(m => m.Quantity))
})
Теперь я хочу, чтобы оптимизировать этот запрос. Если бы я должен был написать хранимую процедуру, я бы написал некоторые вещи, как:
if(a.LineItems.Product == 'x')
{
if(m.Color == true)
xColor++;
else
xBW++;
}
так что я получаю агрегированное значение в одном сканировании. В принципе, я хотел бы оптимизировать этот запрос, чтобы избежать множественного сканирования.
Опечатки в вашем Запрос LINQ? Вы имели в виду это 'xColor = g.Sum (a => (int?) A.LineItems.Where (m => m.Product ==" x "&& m.Color == true) ...'? –
@GrantWinney: Да, спасибо за то, что указали это, теперь его исправили. –
Вы можете добавить кейс коммутатора, введя фигурные скобки внутри запроса linq и обновляя глобальную переменную, используя его как окончательное значение, но я не уверен, как это будет эффективно, так как это тоже будет обрабатывать каждый внутри IEnumerable, созданный из-за Groupby –