是否可以使用过滤器表达式来选择某些列?
像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
似乎没有用,它说数组中的项目数比数据表长!
答案 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。