简体   繁体   English

C#DataTable Linq选择列等于“ x”的不同值

[英]C# DataTable Linq select distinct values where column equals 'x'

I have a Datatable (Groups) designed like so 我有一个像这样设计的数据表(组)

  • ColumnA|ColumnB 列A |列B
  • X|Apple X |苹果
  • Y|Purple Y |紫色
  • X|Apple X |苹果
  • X|Mango X |芒果

    I basically want to select from columna where it's X and get the disinct from ColumnB 我基本上想要从X的columna中进行选择,并从ColumnB中获得不同的信息

    This is what I have 这就是我所拥有的

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

    This will give me distinct but it gives me Purple, and i dont want purple. 这会给我与众不同的感觉,但是却给了我紫色,而我也不想紫色。

    Thanks! 谢谢!

  • 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");
    

    So here we are selecting only the rows of data that you want, only rows where columnA is X. Then we choose only to see columnB, but with unique values only. 因此,这里我们仅选择所需的数据行,仅选择columnA为X的行。然后,仅选择查看columnB,但仅具有唯一值。 Doing it in this order, you'll receive another datatable to play with. 按此顺序执行操作,您将收到另一个要使用的数据表。 It'll only contain 1 column, columnB, and it'll only have unique/distinct values. 它仅包含1列columnB,并且只有唯一/不同的值。

    Enjoy. 请享用。

    If your return has more than one value and you want to Distinct the whole set by just one of the values you should use a custom IEqualityComparer . 如果您的退货有多个值,并且您只想将其中一个值与整个集合区分开,则应该使用自定义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 clause 编辑:包括where子句

    edit2: changed to custom IEqualityComparer edit2:更改为自定义IEqualityComparer

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM