如何从列中列值的DataTable中选择行?

时间:2015-06-16 15:37:06

标签: asp.net .net vb.net linq datatable

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

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

这实际上是我想用VB中的DataTable做的。我看到这篇文章: Query rows that the datatable field contain any item in the list<string>

这似乎正是我想要的,但它没有像我预期的那样工作。我基本上只使用了C# - &gt; 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是一个DataTable,其中包含Codes列。 lstCodesList(Of String),其中包含一些值。

item只包含dtCodes中的所有行,无论Code中是否存在lstCodes列值。

我错过了什么?

编辑;请注意,如果有更简单或更好的方法,我

3 个答案:

答案 0 :(得分:2)

过去,我做过这样的事情:

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

这有用吗?

答案 1 :(得分:2)

您拥有的代码对我来说没问题。我尝试了这个测试并且(正确地)打印出来

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

答案 2 :(得分:1)

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

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