我在EF5扩展中使用MoreLinq,同时在生产环境(非常大的数据库)中测试程序时,发现以下行:

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

花费很长时间(RecordTime是未索引的datetime)

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

最佳答案

这是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的结果全部加载到内存中,然后对其进行迭代以找到最大值。

关于c# - Linq maxBy vs LINQ max +其中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19484563/

10-09 03:39