C#DataTable Linq选择不同的值,其中列等于' x'

时间:2013-06-03 14:29:46

标签: c# linq

我有一个像这样设计的数据表(组)

  • ColumnA | ColumnB
  • X |苹果
  • Y |紫
  • X |苹果
  • X |芒果

    我基本上想从columna中选择它是X并从ColumnB获取消息

    这就是我所拥有的

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

    这会让我与众不同,但它给了我紫色,我不想要紫色。

    谢谢!

  • 3 个答案:

    答案 0 :(得分:8)

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

    答案 1 :(得分:3)

    DataTable dt2 = dt1.Select("ColumnA = 'X'").CopyToDataTable().DefaultView.ToTable(true, "ColumnB");
    

    所以这里我们只选择你想要的数据行,只选择columnA为X的行。然后我们只选择查看columnB,但只选择唯一值。按此顺序执行,您将收到另一个数据表。它只包含1列columnB,它只有唯一/不同的值。

    享受。

    答案 2 :(得分:-1)

    如果您的返回值有多个值,并且您希望仅使用其中一个值区分整个集合,则应使用自定义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());
    

    编辑以包含where子句

    edit2:已更改为自定义IEqualityComparer