我正在使用EF5扩展MoreLinq,在生产中测试我的程序(非常大的数据库)时,我发现该行:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
需要很长时间(RecordTime是非索引datetime)
那是因为MaxBy总是在客户端运行(并且首先从数据库中获取所有记录)?
我正在使用EF5扩展MoreLinq,在生产中测试我的程序(非常大的数据库)时,我发现该行:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
需要很长时间(RecordTime是非索引datetime)
那是因为MaxBy总是在客户端运行(并且首先从数据库中获取所有记录)?
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> selector)
{
return source.MaxBy(selector, Comparer<TKey>.Default);
}
它返回 a 的最大元素(基于给定的投影)IEnumerable<T>,而不是 a IQueryable<T>。所以查询的结果db.TheBigTable确实是先全部加载到内存中,然后再迭代求最大值。