【问题标题】:Linq - Filter datatable based on other datatable column valuesLinq - 根据其他数据表列值过滤数据表
【发布时间】:2014-02-11 07:42:48
【问题描述】:

我有两个具有不同数据行结构但一个公共列的数据表。我想获得第一个数据表的行,这些数据表不存在于基于列 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)

【问题讨论】:

  • 什么是 SPM206MTP?另外,为了澄清一下,您是否想要(第一个表的)不共享 id 值的行?
  • 我用答案例子解决了,比较简单

标签: .net vb.net linq datatable


【解决方案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 现在看起来像:

【讨论】:

  • 像魅力一样工作。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2020-07-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多