gefundeneID = drTerminal.AsEnumerable().Single(Function(s) s("TerminalID") = RandomID)
有一個DataRow數組,並且想要查看RandomID是否在其中一行中。Linq vb.net:在DataRow中查找條目[]
有什麼不對的代碼?
編輯: 得到這個錯誤:操作=不統一的DBNull和Integer
gefundeneID = drTerminal.AsEnumerable().Single(Function(s) s("TerminalID") = RandomID)
有一個DataRow數組,並且想要查看RandomID是否在其中一行中。Linq vb.net:在DataRow中查找條目[]
有什麼不對的代碼?
編輯: 得到這個錯誤:操作=不統一的DBNull和Integer
定義顯然,你的代碼有比較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,您的代碼示例甚至不會編譯。)
如果您想查看ID是否在您的設置中,請不要使用Single,因爲如果找不到匹配項,則會拋出異常。如果您只想在找到匹配項時返回true或false,請使用.Any。如果你想返回找到的結果,考慮SingleOrDefault(如果你知道只能有0-1匹配)或FirstOrDefault,如果你可能會返回多個匹配。
@ Heinzi關於現場可空性和Option Strict的評論也值得考慮。
嘗試以下功能:
Private Function ItemAdded(UserID As String) As Boolean
Return (tbl.Select(String.Format("UserID ='{0}'", UserID)).Count > 0)
End Function
投票決定關閉,因爲你沒有什麼不對您當前的代碼。 (它會返回錯誤的結果嗎?它會拋出一個異常嗎?如果是,哪一個?)以目前的形式,這個問題只能通過猜測來回答。 – Heinzi
+1爲更新的問題。 – Heinzi