5

私は拡張機能を使用EF5していMoreLinqます。本番環境(非常に大きなデータベース)でプログラムをテストしているときに、次の行が見つかりました:

var x = db.TheBigTable.MaxBy(x => x.RecordTime);

非常に時間がかかります (RecordTimeインデックスが作成されていませんdatetime)

これは、MaxBy常にクライアント側で実行される (そして最初にデータベースからすべてのレコードを取得する) ためですか?

4

1 に答える 1

9

拡張メソッドのシグネチャは次MaxByとおりです。

public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
    Func<TSource, TKey> selector)
{
    return source.MaxBy(selector, Comparer<TKey>.Default);
}

IEnumerable<T>ではなく、の最大要素 (指定された射影に基づく) を返しますIQueryable<T>。したがって、クエリの結果db.TheBigTableは実際にはすべて最初にメモリにロードされ、次に最大値を見つけるために反復されます。

于 2013-10-21T00:38:00.120 に答える