2016-10-05 2 views
0

У меня есть запрос на фреймворк сущности, это хорошо, или есть лучшие способы? Это занимает время журнала для выполнения ...Как выполнить группу фреймворка сущности на

from orderRow in dboc.Order 
join workerRow in dboc.Worker on orderRow.OperatorId equals workerRow.Id 
where orderRow.AcceptedTime >= queryData.BeginAcceptedTime && workerRow.WorkerKindId == (int)WorkerKind.Human 
group new { orderRow, workerRow } by orderRow.OperatorId 
into grp 
select new OperatorCompetitionInfo 
{ 
    WorkerId = grp.Key, 
    FullName = grp.FirstOrDefault().workerRow.FullNameWithCode, 
    OrderCount = grp.Count() 
}).ToList(); 

ответ

1

EF создает неэффективные запросы при использовании функции не являющейся агрегатной как FirstOrDefault на результате оператора group by.

Если значение, как ожидается, будет один и тот же внутри группировки, вы бы лучше использовать Min или Max метод вместо (при равных значениях, Min, Max и First должен возвращать один и тот же результат), который будет быть переведены на гораздо лучший SQL-запрос.

Так, попробуйте заменить

FullName = grp.FirstOrDefault().workerRow.FullNameWithCode, 

с

FullName = grp.Min(item => item.workerRow.FullNameWithCode), 

и посмотреть, если это помогает.

+0

спасибо Иван, так что лучше, спасибо еще раз –

Смежные вопросы