VB.NET Datatable.Select表达式

时间:2012-10-20 13:42:49

标签: vb.net linq select datatable

是否可以使用过滤器表达式来选择某些列? 像sql中的select a,b,c from table

这是我想要做的事情

 Dim rows() As DataRow = bookedorders.Select("a,b,c")   'select columns a b c only, i know its wrong
        Dim zzz As DataTable = rows.CopyToDataTable

因此可以使用Datatable.Select来选择列,并使用像sql WHERE a=1这样的条件

我的linq尝试

Dim q = From r In bookedorders.AsEnumerable Select r.Field(Of Integer)("a") And r.Field(Of String)("b") And r.Field(Of String)("c") And r.Field(Of Integer)("d")
        For Each m In q
            zzz.Rows.Add(m)
        Next

似乎没有用,它说数组中的项目数比数据表长!

1 个答案:

答案 0 :(得分:1)

DataTable.Select可让您将过滤条件指定为String

bookedorders.Select("a = 1")

您无法指定要提取的列,因为这会破坏类型结构,因为它应该返回与您原来相同的DataRow。如果您只返回特定列,则需要另一个DataTable来包含它们。

假设存在此功能,限制返回列的数量是不切实际的,因为您已经在DataRow填充了数据select a,b,c from table,这可以减少网络带宽并提高查询性能通过仅指定要从数据库中提取的某些列。

如果你想使用LINQ,你可以这样做:

From r In bookedorders Select a=r.Field(Of Integer)("a"), b=r.Field(Of String)("b"), c=r.Field(Of String)("c"), d=r.Field(Of Integer)("d")

请注意,您不能将此查询的结果直接.Add行用于DataTable,因为返回的枚举不是DataRow类型。如果你需要它,那么这里是an implementation on MSDN