3

フォームのクエリがある場合

var query = from items in entityDb.TableName
            join requestedBy in entityDb.People on items.RequestedById equals requestedBy.PersonId in requestedByOuter
            from requestedBy in requestedByOuter.DefaultIfEmpty()
            select items;

また、これが大きなクエリであり、さらに 10 個の結合があるとします。次に、条件付きフィルターがあります

if (!string.IsNullOrEmpty(phaseFilter))
{
   query = query.Where(item => item.Phase == phaseFilter);
}

この時点で、遅延実行の利点を失ったと思います。何千もの結果があると、パフォーマンスが低下する可能性があります。私のクエリが実際には 50 行のコードであることを考えると、私は行かないことを好みます...

if(phaseFilter not null)
  //50 lines....
else if(filter2 not null)
  //50 lines...
else if (filter2 not null and phaseFilter not null)
  //50 lines...

うーん。どうにかして私のケーキを食べてもいいですか?

4

2 に答える 2

4

いいえ、あなたの場合、遅延実行は失われません。

IQueryableを複数回呼び出すことで を修正できWhere、実際のクエリは を列挙するときに実行されますIQueryable

上記はOrderBy、たとえば次のような他の方法にも当てはまります。

于 2012-08-06T16:18:35.453 に答える