2011-07-11 6 views
0

LINQステートメントによって返された値を格納する変数に定義するデータ型が混乱しています。 「」""Unable to cast object of type 'WhereSelectListIterator 2 `LINQヘルプ返されたセットのデータ型

サンプルコード:

現在、私は次のようにいくつかのデータ型が、その生成エラーとしてそれを定義しています。ここ

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(など)のオーバーロードを使用して:デフォルトでは条件が(あなたのケースでBaserates)IEnumberableを返し

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

ええ、私は単一の値が欲しいです。私はあなたが言ったように試みたが、エラー: "{"オブジェクト参照がオブジェクトのインスタンスに設定されていない "}" – KoolKabin

+0

@ KoolKabin:どのオプションを使用していますか?スタックトレースはどのように見えましたか?それはNothingだったBaseRateListではないと確信していますか? –

0

。返されたリストの最初の要素を使用するか、使用してください。

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

m貧弱なC#でvb.netで翻訳できる – KoolKabin

0

LINQクエリはまだ実行されていない式を表します。今すぐあなたのコードは、そのクエリをIQueryable(Of BaseCat)として宣言しなければならない変数に入れようとしています。 クエリを実行して結果を取得する場合は、Fromの代わりにAggregateを使用してクエリの結果から何かを選択するか、ToListまたはToArrayを使用して結果をコレクションに変換する必要があります。 First、FirstOrDefault、SingleまたはSingleOrDefault関数を使用して、クエリの実行結果を1つ選択します。

クエリ自体とクエリの実行結果との違いに注意することが重要です。クエリを変数(IQueryable)に入れると、そのクエリを別のクエリ(たとえばDim newQuery = From itm In myBase Where itm.MyDate <= Today)で展開し、そのクエリを展開して実際にその列挙または結果の選択を強制するまでクエリは実行されません上記の方法の1つまたは類似のものを使用してください。

関連する問題