2016-10-05 4 views
0

エンティティフレームワーククエリがあります。これは大丈夫ですか、より良い方法がありますか?それはあなたがgroup by演算子の結果にFirstOrDefaultのような非集計関数を使用するときEFは、非効率的なクエリを生成エンティティフレームワークグループを実行する方法

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

...実行するためのログ時間がかかります。あなたがより良い(1と同じ結果を返す必要が同じ値のため、MinMaxFirstMinまたはMaxメソッドの代わりに使用したい値を1とグループ内の同じであると予想される場合

、意志はるかに良いSQLクエリに変換されます。

ので、

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

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

を交換しようとすると、それが助けかどうかを確認します。

+0

イワン、ありがとう、もう一度ありがとう –

関連する問題