为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的过滤器不起作用?d.DefaultView.RowFilter = cls;

为什么我的过滤器不起作用?d.DefaultView.RowFilter = cls;

C#
哈士奇WWW 2023-04-29 15:52:37
我只想对我的数据表应用行过滤器,但它不起作用,没有错误,只是取回相同的数据表。我尝试从数据表创建一个数据视图以便应用,但这也不会返回过滤后的列表。我不知道为什么下面的代码不起作用..DataTable d = processFileData(concatFile);string cls = String.Format("Column6 NOT IN ({0})", String.Join(",", returnClass()));d.DefaultView.RowFilter = cls;上面的 cls 变量是我尝试使用的 int 值列表,如下所示:Column6 NOT IN (75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,281,303,405,406,493,599,601,606,610,626,630,639,640,647,648,651,662,664,671,672,680,689,697,701,703,706,709,712,717,718,724,735,740,741,743,744,767,768,769,770,775,780,791,799,800,801,802,803,805,806,807,808,810,811,812,815,816,817,818,820,836,837,873,874,875,879,881,895,896,897,902,903,904)我希望有一组新的记录,其中只有那些在我的过滤器中没有条件的记录。原始 DataTable = 34,945 条记录,如果我在文件中手动应用 excel 中的筛选器,预期结果应该是 DataTable = 29,240 条记录。这是我尝试使用过滤器完成的示例:原始数据表:列 1、列 2、列 4、列 5、列 6你好,今天,食物,乐趣,75你好,今天,食物,乐趣,75你好,今天,食物,乐趣,79你好,今天,食物,乐趣,79你好,今天,食物,乐趣,79你好,今天,食物,乐趣,100你好,今天,食物,乐趣,101你好,今天,食物,乐趣,700你好,今天,食物,乐趣,750你好,今天,食物,乐趣,749你好,今天,食物,乐趣,755你好,今天,食物,乐趣,799你好,今天,食物,乐趣,799你好,今天,食物,乐趣,804根据 Column6 值过滤后的预期数据表:列 1、列 2、列 4、列 5、列 6你好,今天,食物,乐趣,100你好,今天,食物,乐趣,101你好,今天,食物,乐趣,700你好,今天,食物,乐趣,750你好,今天,食物,乐趣,749你好,今天,食物,乐趣,755你好,今天,食物,乐趣,804
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以为此使用 linq 而不是 DataView


List<int> filter = new List<int>()

            {

               75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,281,303,405,406,493,599,601,606,610,626,630,639,640,647,648,651,662,664,671,672,680,689,697,701,703,706,709,712,717,718,724,735,740,741,743,744,767,768,769,770,775,780,791,799,800,801,802,803,805,806,807,808,810,811,812,815,816,817,818,820,836,837,873,874,875,879,881,895,896,897,902,903,904

            }; 



DataTable output = dt.AsEnumerable().Where((row,index) => !filter.Contains(index)).CopyToDataTable();

希望这能回答你的问题


查看完整回答
反对 回复 2023-04-29
?
波斯汪

TA贡献1811条经验 获得超4个赞

 // list of values to be filtered

            List<int> filter = new List<int>()

            {

               75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,281,303,405,406,493,599,601,606,610,626,630,639,640,647,648,651,662,664,671,672,680,689,697,701,703,706,709,712,717,718,724,735,740,741,743,744,767,768,769,770,775,780,791,799,800,801,802,803,805,806,807,808,810,811,812,815,816,817,818,820,836,837,873,874,875,879,881,895,896,897,902,903,904

            }; 


// LINQ statement to do filtering

  IEnumerable<DataRow> unmatchingRows = from DataRow row in dt.Rows

                                      where !filter.Contains((int)row[0])

                                      select row;

  // add to a new datatable

  DataTable output = dt.Clone();

  foreach (DataRow item in unmatchingRows)

  {

      output.ImportRow(item);

  }


查看完整回答
反对 回复 2023-04-29
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信