2011-09-28 44 views
2
gefundeneID = drTerminal.AsEnumerable().Single(Function(s) s("TerminalID") = RandomID) 

有一個DataRow數組,並且想要查看RandomID是否在其中一行中。Linq vb.net:在DataRow中查找條目[]

有什麼不對的代碼?

編輯: 得到這個錯誤:操作=不統一的DBNull和Integer

+0

投票決定關閉,因爲你沒有什麼不對您當前的代碼。 (它會返回錯誤的結果嗎?它會拋出一個異常嗎?如果是,哪一個?)以目前的形式,這個問題只能通過猜測來回答。 – Heinzi

+0

+1爲更新的問題。 – Heinzi

回答

1

定義顯然,你的代碼有比較TerminalID,它可以爲DBNull,與整數RandomID麻煩。可以通過訪問TerminalID如下避免這個問題:

...(Function(s) s.Field(Of Integer?)("TerminalID") = RandomID) 

DataRow.Field提供強類型訪問的數據字段,並且與空類型(如Integer?)一起使用時,自動轉換到DBNulls Nothing。由於Integer?(您的字段)和Integer(RandomID)可以與=進行比較,因此上面的代碼應該可以正常工作。

作爲一方評論:我建議打開Option Strict,這樣可以避免在整個地方使用大量的隱式轉換,並鼓勵良好的編碼風格。 (是的,打開它後會出現很多編譯錯誤,但這對於提高代碼質量是一個很好的原因。使用Option Strict On,您的代碼示例甚至不會編譯。)

1

如果您想查看ID是否在您的設置中,請不要使用Single,因爲如果找不到匹配項,則會拋出異常。如果您只想在找到匹配項時返回true或false,請使用.Any。如果你想返回找到的結果,考慮SingleOrDefault(如果你知道只能有0-1匹配)或FirstOrDefault,如果你可能會返回多個匹配。

@ Heinzi關於現場可空性和Option Strict的評論也值得考慮。

0

嘗試以下功能:

Private Function ItemAdded(UserID As String) As Boolean 
     Return (tbl.Select(String.Format("UserID ='{0}'", UserID)).Count > 0) 
End Function