我正在使用EF5
MoreLinq
扩展,同时在生产中测试我的程序(非常大的数据库),我发现了这一行:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
需要很长时间(RecordTime
是未编入索引的datetime
)
是因为MaxBy
总是在客户端运行(并且首先从数据库中获取所有记录)?
答案 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
的结果确实首先被加载到内存中,然后迭代它们以找到最大值。