2013-10-21 34 views
4

我使用EF5MoreLinq extenstion,而在生產(非常大的數據庫)測試我的節目,我發現,這行:MoreLinq maxBy VS LINQ MAX +地方

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

需要很長的時間( RecordTime是一個非索引datetime

這是因爲MaxBy總是在客戶端運行(並首先從數據庫中獲取所有記錄)?

+2

MoreLINQ完全是客戶端;你不能在EF中使用它。 – SLaks

回答

7

這裏是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確實全部首先加載到內存中,然後迭代它們以找到最大值。

+0

很酷,正如我懷疑的那樣,謝謝你的回答。 – Ofiris