如何从列值位于列表中的数据表中选择行



假设您在SQL中有一个表,并且您想查找特定列可能是3个选项之一的所有行。你可以写这样的东西:

SELECT * FROM MyTable WHERE uid IN (123, 456, 789)

这实际上是我想在 VB 中使用DataTable做的事情。我看到了这篇文章:查询数据表字段包含列表<字符串中的任何项的行>

这似乎正是我想要的,但它并没有像我预期的那样工作。我基本上只是使用 C# -> VB 转换器并插入我的变量并提出这个:

Dim item = From a In dtCodes.AsEnumerable() Where
                lstCodes.Any(Function(x) a.Field(Of String)
                ("Code").ToUpper().Contains(x.ToUpper())) Select a

dtCodes是一个数据表,其中有一列CodeslstCodes是一个包含一些值的List(Of String)

不过,item只拥有dtCodes中的所有行,无论它们的Code列值是否存在于 lstCodes 中。

我错过了什么?

编辑;请注意,如果有更简单或更好的方法,我不必使用 LINQ。

过去,我做过这样的事:

Dim item = From r as DataRow in dtCodes.Rows 
           Where lstCodes.contains(r.Item("Codes")) 
           Select r

这行得通吗?

你的代码对我来说看起来不错。我尝试了这个测试,它(正确)打印出来

a2
b1

 Dim dtCodes As New DataTable
        dtCodes.Columns.Add(New DataColumn("Code"))
        dtCodes.Rows.Add("a1")
        dtCodes.Rows.Add("a2")
        dtCodes.Rows.Add("b1")
        dtCodes.Rows.Add("b2")
        Dim lstCodes As New List(Of String)
        lstCodes.Add("b1")
        lstCodes.Add("c1")
        lstCodes.Add("a2")
        Dim item = From a In dtCodes.AsEnumerable()
                    Where lstCodes.Any(Function(x) a.Field(Of String)("Code").ToUpper().Contains(x.ToUpper()))
                    Select a
        For Each itm In item
            Debug.WriteLine(itm("Code").ToString)
        Next

这是一个 lamba 表达式,也应该有效。

Dim item = dtCodes.Select.Where(Function(x As DataRow) lstCodes.Contains(x.Item("Codes")))

相关内容

  • 没有找到相关文章

最新更新