C# DataTable Linq select distinct values where column equals

本文关键字:where column equals values distinct DataTable Linq select | 更新日期: 2023-09-27 18:16:31

我有一个像这样设计的Datatable (Groups)

  • 一列圆柱| ColumnB
  • X |苹果
  • Y |紫色
  • X |苹果
  • X |芒果

    我想要从X所在的列中选择并获取与ColumnB

    不同的值

    这是我的

     var names = (from DataRow dr in Groups.Rows
                     orderby (string)dr["ColumnB"]
                     select (string)dr["ColumnB"]).Distinct();
    

    这个会显示不同的颜色,但是它显示的是紫色,我不想要紫色

    谢谢!

  • C# DataTable Linq select distinct values where column equals

    var names = (from DataRow dr in Groups.Rows
                     where dr["ColumnA"] == "X"
                     orderby (string)dr["ColumnB"]
                     select (string)dr["ColumnB"]).Distinct();
    
    DataTable dt2 = dt1.Select("ColumnA = 'X'").CopyToDataTable().DefaultView.ToTable(true, "ColumnB");
    

    所以这里我们只选择你想要的数据行,只有列na是x的行,然后我们选择只看列b,但只有唯一的值。按照这个顺序执行,您将获得另一个数据表。它将只包含1列,columnB,并且它将只包含唯一/不同的值。

    如果你的返回值不止一个,而你只想用其中一个值来区分整个集合,你应该使用自定义的IEqualityComparer。

    var names = (from DataRow dr in Groups.Rows
                 where (string)dr["ColumnA"] == "X"
                 orderby (string)dr["ColumnB"]
                 select new { 
                    ColumnA = (string)dr["ColumnA"], 
                    ColumnB = (string)dr["ColumnB"]
                }).Distinct(new MyCustomEqualityComparer());
    

    edit: to include where子句

    edit2:更改为custom IEqualityComparer