我在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/