MoreLinq maxBy vs LINQ max + where

时间:2013-10-21 00:32:28

标签: c# entity-framework linq-to-sql morelinq

我正在使用EF5 MoreLinq扩展,同时在生产中测试我的程序(非常大的数据库),我发现了这一行:

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

需要很长时间(RecordTime是未编入索引的datetime

是因为MaxBy总是在客户端运行(并且首先从数据库中获取所有记录)?

1 个答案:

答案 0 :(得分:8)

以下是the MaxBy extension method的签名:

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的结果确实首先被加载到内存中,然后迭代它们以找到最大值。