2009-09-09 67 views
4

考慮一個用於表示GroupBy()的結果的類。代碼的目標是替換一個存儲過程,該存儲過程可以對Created datetime字段中的一堆行進行分組和計數。Linq To Sql:成員Date沒有支持轉換爲SQL

public class Statistic 
{ 
    public int NumRecords { get; set; } 
    public DateTime Date { get; set; } 
} 

下面的代碼引發異常/警告:

//returning an IEnumerable<Statistic> 
return db.MyTable 
      .GroupBy(x => x.CreatedOn.Date) //precision of date, not time. 
      .Select(x => new Statistic(x.Key, x.Count())) //custom object 
      .OrderBy(x => x.Date); 

例外:

成員日期還沒有支持 轉換爲SQL

當我重構代碼以加載到var ,則在OrderBy()上生成異常/警告。

問題:如何避免使用Linq To Sql的這種異常?

回答

1

事實證明,查詢並沒有被執行,並且當我期待它被加載到變量中。

以下內容將按照預期進行評估和正確運行。

IEnumerable<Statistic> stats = db.MyTable   
     .GroupBy(x => x.CreatedOn.Date) 
     .Select(x=> new Statistic(x.Key, x.Count())); 


    return stats.OrderBy(x=>x.Date); 
8

我使用非默認的構造函數時之前進入這個運行。如果您使用的是object initializer,Linq to Sql可以計算出映射:

return db.MyTable 
      .GroupBy(x => x.CreatedOn.Date) //precision of date, not time. 
      .Select(x => new Statistic{Date = x.Key, NumRecords = x.Count()}) //custom object 
      .OrderBy(x => x.Date); 
+0

這正是我所期待的。謝謝! – Andy 2010-09-01 19:19:31