如何执行实体框架组

时间:2016-10-05 06:49:26

标签: entity-framework-6

我有一个实体框架查询,这没关系,还是有更好的方法?它需要一个记录时间来执行...

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 个答案:

答案 0 :(得分:1)

当您对FirstOrDefault运算符的结果使用group by等非聚合函数时,EF会生成效率低下的查询。

如果预期分组中的值是同一个,那么您最好使用MinMax方法(对于相等的值,Min,{ {1}}和Max应该返回一个相同的结果),这将被转换为更好的SQL查询。

所以,试着替换

First

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

看看是否有帮助。