2012-04-15 123 views
0

任何人都知道爲什麼我有這個錯誤?Visual basic LINQ錯誤

我收到以下錯誤:

Object reference not set to an instance of an object

這裏是LINQ問題。感謝您提前提供任何幫助。

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

你嘗試,我在我的回答對您的最後一個問題的變化? – 2012-04-15 15:09:06

+0

這很可能意味着你在'seat'集合中有一些'null'條目。 – svick 2012-04-15 15:11:13

+0

@MarkHall是的,我試過你的更正,它在LINQ上沒有任何區別。我想我可能會有空條目,所以我可能會嘗試另一個循環來刪除它們,並將只有有效的條目放入一個新的數組。編輯:這沒有奏效,我仍然得到空引用。 – amedeiros 2012-04-15 15:22:06

回答

1

請問如果你改變了第一線,以它的工作:

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

這表明那裏的座位列表中的空值,並且高於Where拉姆達應該刪除它們。

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 

你確定每行都用空格而不是別的東西分隔嗎?即使在那裏也不應該導致一個空值。

這裏是我的示例程序,似乎工作(在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