I am using EF5 with the MoreLinq extenstion, while testing my program in production (very big database), I found out that the line:

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

Takes very long time (RecordTime is a non-indexed datetime)

Is that because MaxBy always runs on the client side (and firstly gets ALL records from the database)?

有帮助吗?

解决方案

Here is the signature of 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);
}

It returns the maximal element (based on the given projection) of an IEnumerable<T>, not an IQueryable<T>. So the results of the query db.TheBigTable are indeed all loaded into memory first, and then they are iterated to find the maximum.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top