我有两个数据表具有不同的数据流结构,但有一个公共列。我想获得第一个数据表的ROWS,它们不会出现在基于列id的第二个数据表上。我可以完成它。我尝试了几件事:
表:DatasetGlobal和DatasetInserted:
Dim queryw = From r In DatasetGlobal.Tables(0). _
AsEnumerable().ToList() _
.Where(Function(r)
Return DatasetInserted.Tables(0).AsEnumerable().ToList().Any _
(Function(r2)
Return Not r2.Field(Of Decimal)(Constants.IDINDICAD) = _
r.Field(Of Decimal)(Constants.cteIDINDICAD)
End Function)
End Function)
答案 0 :(得分:1)
过滤DataTable
的最简单方法是使用RowFilter
属性。
示例:强>
Dim dt1 = New DataTable()
dt1.Columns.Add("id", GetType(Integer))
dt1.Rows.Add(New Object() {1})
dt1.Rows.Add(New Object() {3})
dt1.Rows.Add(New Object() {5})
Dim dt2 = New DataTable()
dt2.Columns.Add("id", GetType(Integer))
dt2.Columns.Add("value", GetType(String))
dt2.Rows.Add(New Object() {1, "Foo"})
dt2.Rows.Add(New Object() {2, "Bar"})
dt2.Rows.Add(New Object() {3, "Foo"})
dt2.Rows.Add(New Object() {4, "Bar"})
dt2.Rows.Add(New Object() {5, "Foo"})
Dim ids = dt1.AsEnumerable().Select(Function(r) CInt(r(0)))
dt2.DefaultView.RowFilter = String.Format("id not in ({0})", String.Join(",", ids))
dt2.DefaultView
现在看起来像: