【问题标题】:How to get the collection of items filtered out from the DataView如何获取从 DataView 中过滤掉的项目集合
【发布时间】:2018-07-01 02:45:08
【问题描述】:

我需要使用 DataView 中的 RowFilter 来获取从视图中过滤掉的项目集合。

我可以使用以下查询从 DataView 中获取全部记录。

 allRecords= (data as DataView).Table.AsEnumerable().AsQueryable();

我只需要来自 DataView 的 filtererd 记录集合。我怎样才能做到这一点。 EX:如果一个表作为记录a a, b, c, d 然后应用过滤器在视图中只显示一个。现在我需要获取不在视图中的项目(b、c 和 d)。帮我解决这个问题。

【问题讨论】:

  • 您可以在两个集合之间使用Linq Except 来获取差异。
  • 我曾尝试使用 except 方法,但与输出没有区别。 var table = (data as DataView).ToTable().AsEnumerable(); var allTable = (data as DataView).Table.AsEnumerable(); filteredRecords = allTable.Except(table).AsQueryable();
  • 您需要与过滤后的表格进行比较,而不是完全相同的表格。
  • 这里我提到的表是过滤表(仅包含 100 行),而 allTable 包含所有记录(225 行)。
  • 它通过添加 Default DataRowComparer allTable.Except(table, DataRowComparer.Default) 来工作,谢谢。

标签: c# winforms filtering dataview


【解决方案1】:

这将过滤数据表(假设您的列名是recorda)

 (data as DataView).DefaultView.RowFilter = "recorda='a'";

然后这将调用“ToTable()”,它会从过滤后的视图中创建一个表,而不仅仅是引用完整的未过滤表的 Table。

allRecords= (data as DataView).ToTable()

【讨论】:

  • 我无法从 DataView (data as DataView).DefaultView = "recorda='a'"; 分配 DefaultView 属性我错过了什么吗?
猜你喜欢
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2020-10-12
  • 2022-11-02
  • 1970-01-01
相关资源
最近更新 更多