2016-10-05 29 views
0

我有一個實體框架查詢,這是好的,還是有更好的方法?它需要一個日誌的時間來執行......當你在group by操作的結果使用非聚集功能,如FirstOrDefault如何執行一個實體框架組

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產生低效的查詢。

如果該值有望成爲一個分組中的一樣,你最好使用MinMax方法,而不是(對相等的值,MinMaxFirst應該返回同一個結果),這將被翻譯成更好的SQL查詢。

所以,儘量用

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

更換

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

,看看有沒有什麼幫助。

+0

謝謝伊萬,所以更好,再次感謝你 –