2011-01-13 54 views
4

我一直在摸索着我的這一段時間。假設我做了擴展方法,按日期對項目列表進行分組,以便更改可能的分組,以便可以按日,周或月分組結果。LINQ to SQL - 按日/周/月集團

我想出了下面,但我不斷收到以下錯誤:

方法 'System.Object的DynamicInvoke(System.Object的[])' 有沒有支持轉換爲SQL

方法:

public static IQueryable<IGrouping<MonthDateGroup, T>> GroupByDate<T>(
    this IQueryable<T> items, 
    DateGroupFrequency grouping, 
    Expression<Func<T, DateTime?>> func) 
{ 
    var selector = func.Compile(); 
    IQueryable<IGrouping<MonthDateGroup, T>> grouped = null; 

    if (grouping == DateGroupFrequency.Daily) 
    { 
     grouped = from a in items 
        let date = selector(a).Value 
        group a by new MonthDateGroup 
        { 
         Day = date.Day, Month = date.Month, Year = date.Year 
        } 
        into g 
        select g; 
    } 
    //Rest of groupings... 

我假設使用的查詢中的函數功能的原因造成的錯誤,是有可能產生這樣的代碼?

P.S.我仍然在試圖總結我的周圍Func鍵的頭,和表達式:)

回答

3

如若組語法不是:

group a by new MonthDateGroup 
{ 
a.Day = date.Day, a.Month = date.Month, a.Year = date.Year 
} 
2

您的問題,看起來像本身不能執行到SQL查詢。在使用它之前,您可能需要將您的項目轉換爲IEnumerable。請注意,這將導致數據從SQL服務器加載到內存中,因此應儘可能延遲到LINQ鏈中。

你既可以改變你的項目參數是一個IEnumerable,而不是IQueryable的,或者不工作創造你的方法變量(靠近頂部)

var itemsEnumerable = items.AsEnumerable(); 

你也將不得不改變你的返回類型從IQueryable到IEnumerable

+0

我需要在SQL中執行查詢。如果我刪除泛型和Func參數並將其與類綁定,此查詢工作正常,但我需要對多個查詢進行通用支持,並且由於性能限制,它必須在SQL中執行。我假設我缺少使查詢工作所需的語法糖 – Mig 2011-01-13 12:56:00