2009-05-23 49 views
0

以下LINQ2SQL代碼從表中最大日期是造成我很多頭痛,我希望有人能幫助嘗試使用LINQ2SQL

DateTime _maxRecordedDate = (from snapshot in _ctx.Usage_Snapshots 
             where snapshot.server_id == server_id 
             orderby snapshot.reported_on descending 
             select snapshot.reported_on).First().Value; 

這個代碼在LinqPad和編譯罰款,但該項目運行時有一個「指定的方法是不受支持的」

如果我不使用的值,或將其丟我得到以下錯誤:

**

Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)

**

+0

經過大量搜索後,我發現問題源於使用ADO.NET數據服務。顯然他們使用Linq的有限子集,並且目前不可能使用Max,First等方法。僅使用First()的Bummmer – jdiaz 2009-05-23 23:33:31

回答

1
DateTime? _maxRecordedDate = _ctx.Usage_Snapshots.Where(s => s.server_id == server_id).Max(d => d.reported_on); 
+0

與使用第一個()相同的錯誤 不能隱式轉換類型'System.DateTime?'到'System.DateTime'。存在明確的轉換(您是否缺少演員?) – jdiaz 2009-05-23 23:06:59

+0

是的,返回的類型是DateTime? (可爲空值),只需將其分配給正確的匹配類型即可。 – 2009-05-23 23:10:55

1

難道不需要First()。Value?也許只是First()。

我正在查看this

+0

會導致DateTime? != DateTime錯誤。 – jdiaz 2009-05-23 23:02:41

+0

是的,所以要麼將它分配給DateTime?變量,或使用var _maxRecordedDate。 – 2009-05-23 23:06:43

0

羅伯特提供了一個更好的方式來做到這一點,但你的代碼的問題是,你在呼喚.value的,這將在SQL Server環境中運行,所以沒有.value的操作,可以是轉換爲SQL。你必須調用.ToList()。First()。Value,或賦值給DateTime ?.既然你不能調用.First()。ToList()...因爲First()返回一個DateTime?那麼你最好分配給DateTime ?,因爲你不想從SQL返回整個列表。

0

經過大量搜索後,我發現問題源於使用ADO.NET數據服務。顯然他們使用Linq的有限子集,目前不可能使用Max,First等方法。Bummme