gefundeneID = drTerminal.AsEnumerable().Single(Function(s) s("TerminalID") = RandomID)
拥有一个DataRow数组,并希望查看RandomID是否在其中一行中。
这段代码出了什么问题?
编辑: 出现此错误:未为DBNull和Integer
定义operator =答案 0 :(得分:1)
显然,您的代码无法将TerminalID
(可以是DBNull)与整数RandomID
进行比较。您可以通过访问TerminalID
来避免此问题,如下所示:
...(Function(s) s.Field(Of Integer?)("TerminalID") = RandomID)
DataRow.Field
提供对数据字段的强类型访问,并且当与可空类型(例如Integer?
)一起使用时,会自动将DBNull转换为Nothing
。由于Integer?
(您的字段)和Integer
(RandomID)可以与=
进行比较,因此上述代码应该可以正常使用。
作为旁注:我建议打开Option Strict,这样可以避免在整个地方使用大量隐式转换,并鼓励良好的编码风格。 (是的,打开电源后会出现很多编译错误,但这是有正当理由的...提高代码质量。使用Option Strict On,您的代码示例甚至不会编译。)
答案 1 :(得分:1)
如果要检查ID是否在您的集合中,请不要使用Single,因为如果找不到匹配项将引发异常。如果您只想在找到匹配项时返回true或false,请使用.Any。如果要返回找到的结果,请考虑SingleOrDefault(如果您知道只能有0-1匹配)或FirstOrDefault,如果您可能返回多个匹配项。
@ Heinzi关于字段可空性和Option Strict的评论也值得考虑。
答案 2 :(得分:0)
尝试以下功能:
Private Function ItemAdded(UserID As String) As Boolean
Return (tbl.Select(String.Format("UserID ='{0}'", UserID)).Count > 0)
End Function