2012-04-15 19 views
0

なぜこのエラーが発生しているのですか?Visual BasicのLINQエラー

ここ

Object reference not set to an instance of an object

が問題のLINQです:

私は、次のエラーを取得しています。事前に助けていただきありがとうございます。

Dim windowSeatQuery = From line In seats.Where(function (s) s isnot nothing) 

これが座席リストでNULL値、および上記Whereラムダは、それらを削除する必要があることを示します:

Dim q = From line In seats 
     Let data = line.Split(New [Char]() {" "c}, StringSplitOptions.RemoveEmptyEntries) ' it occurs in this line ' 
     Let seatA = data(0) 
     Let seatB = data(1) 
     Let seatC = data(2) 
     Let seatD = data(3) 
     Let seatE = data(4) 
     Let seatF = data(5) 
     Where seatA Is "." 
     Where seatB Is "." 
     Select seatA, seatF 
+0

あなたは私はあなたの最後の質問に対する私の答えで行われた変更を試してみました? –

+0

これは、 'seats'コレクションに' null'エントリがあることを意味します。 – svick

+0

@マークホールはい私はあなたの訂正を試みましたが、それはLINQに違いはありませんでした。私はそれらを削除し、新しい配列に有効なエントリだけを配置する別のforループを試すかもしれないので、私はnullのエントリがあるかもしれないと思う。編集:これは動作しませんでした私はまだnull参照を取得します。 – amedeiros

答えて

1

それはあなたが最初の行を変更した場合動作します。

0

あなたのWhere句は私にとって奇妙に見えます。あなたは=演算子を使用すべきではない、ではありません:

Dim q = From line In seats 
    Let data = line.Split(New [Char]() {" "c}, StringSplitOptions.RemoveEmptyEntries) ' it occurs in this line ' 
    Let seatA = data(0) 
    Let seatB = data(1) 
    Let seatC = data(2) 
    Let seatD = data(3) 
    Let seatE = data(4) 
    Let seatF = data(5) 
Where seatA = "." AndAlso seatB = "." '<------ Use = on this line not Is 
Select seatA, seatF 

そして、あなたは各行が代わりに何か他のスペースで区切られていることを確認していますか?そこにいることさえあっても、Null Refをもたらすべきではありません。

ここで(暗黙の行継続文字をサポートしていないようLinqPadでテスト)動作するようです私のプログラム例だ:

Sub Main 
    Dim seats As New List(Of String)() 
    seats.Add("1 2 3 4 5 6") 
    seats.Add(". . 9 8 7 6") 
    seats.Add(". . 5 5 5 5") 
    seats.Add("1 2 3 4 5 6") 
    seats.Add(". . 2 4 6 8") 
    seats.Add("1 2 3 4 5 6") 

    Dim q = From line In seats _ 
     Let data = line.Split(New [Char]() {" "c}, StringSplitOptions.RemoveEmptyEntries) _ 
     Let seatA = data(0) _ 
     Let seatB = data(1) _ 
     Let seatC = data(2) _ 
     Let seatD = data(3) _ 
     Let seatE = data(4) _ 
     Let seatF = data(5) _ 
    Where seatA = "." AndAlso seatB = "." _ 
    Select seatA, seatF 

    q.Dump() 
End Sub