2009-01-12 97 views
5

當談到Linq to SQL時,我有點新手,但我希望你能幫上忙。我已經寫了下面的LINQ to SQL語句擴展方法:當我使用Linq to SQL時,爲什麼會出現「Invalid Cast」?

Cedb.ClassEvents.Where(c => c.ClassID == 1).Select(c => c).Single() 

凡商務及經濟發展是DataContext的,ClassEvents是(類和事件在設施舉行),一張桌子和的ClassID是唯一的整數鍵。

此查詢在LinqPad(無Cedb)中運行良好。當它返回時,它表示返回類型是「ClassEvent」。在Visual Studio的Intellisense中,它告訴我這個查詢的返回類型是ClassEvent(在我的數據模型中創建)。然而,當我試圖在一個變量的結果:

var classEvent = Cedc.ClassEvents.Where(c.ClassID == 1).Select(c => c).Single(); 

然後我得到一個錯誤:InvalidCastException的:指定的轉換無效。如果我使用「ClassEvent」類代替var,則會發生同樣的情況。我是新手,但這看起來像是一個真正的扣籃,而不是一個錯誤。有沒有關於Single方法的問題,我不知道是導致錯誤?任何幫助,將不勝感激!

回答

5

Slace - 以及任何其他感興趣的方。 「無效的轉換異常」錯誤的原因是底層數據模型的變化。一個小小的領域已經改變了一點。因此,當系統試圖將查詢結果映射到「ClassEvent」數據結構時,模型(尚未更新)和數據表之間出現衝突。

儘管如此,我很欣賞答案!

1

你不需要做既選擇和一個單一的,事實上,你甚至不需要在那裏,你可以逃脫(見http://msdn.microsoft.com/en-us/library/bb535118.aspx):

var classEvent = Cedc.ClassEvents.Single(c => c.ClassID == 1); 

我會也建議不要使用Single,除非您100%確定Func<T, bool>將始終返回一個值,就好像它沒有返回值一樣,您將拋出異常。最好是使用SingleOrDefault並在與對象交互之前進行空檢查(http://msdn.microsoft.com/en-us/library/bb549274.aspx

+0

謝謝!我開始輸入「如果有人知道更簡單的方法......」,因爲我記得有一篇「10個神話」文章解釋了這種情況。但是,我想了解所有事情都做了什麼,而不僅僅是尋找捷徑。幸運的是,你們都做到了。再次感謝。 – 2009-01-12 02:38:56

+0

鏈接到[10 LINQ神話](http://www.albahari.com/nutshell/10linqmyths.aspx) – Justin 2012-07-01 22:00:29

相關問題