2011-07-11 48 views
0

我很困惑來定義我的變量,其存儲LINQ語句返回值的數據類型的數據類型。LINQ幫助,返回的設置

目前,我將其定義爲一些數據類型,但是喜歡它的生成錯誤:""Unable to cast object of type 'WhereSelectListIterator 2「」'

示例代碼:

Private BaseRateList = List (of BaseCat) 
Private myBase As BaseCat = Nothing 

'''In some other proc 
myBase = From BaseRate In BaseRateList _ 
     Where BaseRate.UIN = 4 _ 
     Select BaseRate 

在這裏,我想myBase持有具有UIN數據= 4

回答

1

這聽起來像你只是想一個值。你可能要考慮的選項包括:

例如

myBase = (From BaseRate In BaseRateList _ 
      Where BaseRate.UIN = 4 _ 
      Select BaseRate).Single() 

...取決於你如何想它表現得是否有0或多個匹配值。

或使用Single(ETC)的過載,這需要斷言:

myBase = BaseRateList.Single(Function(baseRate) baseRate.UIN = 4) 
+0

是的我想要單一的價值。我試着按照你的說法,但它說錯誤:「{」對象引用未設置爲對象的實例。「}」 – KoolKabin

+0

@KoolKabin:使用哪個選項?堆棧跟蹤是什麼樣的?你確定它不是沒有的BaseRateList? –

0

凡默認條件(在你的情況Baserates)返回IEnumberable。以返回列表的第一個元素或嘗試使用

var baseRate = BaseRateList.Single(baseRate => baseRate.UIN == 4); 
+0

在C#中的窮人可以在vb.net中翻譯 – KoolKabin

0

您的LINQ查詢表示尚未執行的表達式。現在你的代碼試圖將該查詢放入一個變量中,該變量必須聲明爲IQueryable(Of BaseCat)。如果你想執行查詢得到的結果,你應該使用聚合,而不是從撿東西了查詢結果的,或者你應該使用ToList或ToArray的到的結果轉換爲一個集合,或者你應該使用First,FirstOrDefault,Single或SingleOrDefault函數從執行查詢中選擇一個結果。

重要的是要注意查詢本身以及執行查詢的結果之間的差異是很重要的。如果你把查詢到的變量(IQueryable的),你可以通過然後在該查詢(例如Dim newQuery = From itm In myBase Where itm.MyDate <= Today)執行另一個查詢對查詢擴展和查詢仍然不會執行,直到你真正迫使它枚舉,或者從它的結果使用上述方法之一或類似的東西。