1

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

  • A列|B列
  • X|苹果
  • Y|紫色
  • X|苹果
  • X|芒果

    我基本上想从 columna 中选择它的 X 并从 ColumnB 中获取 disinct

    这就是我所拥有的

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

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

    谢谢!

  • 4

    3 回答 3

    8
    var names = (from DataRow dr in Groups.Rows
                     where dr["ColumnA"] == "X"
                     orderby (string)dr["ColumnB"]
                     select (string)dr["ColumnB"]).Distinct();
    
    于 2013-06-03T14:37:04.993 回答
    3
    DataTable dt2 = dt1.Select("ColumnA = 'X'").CopyToDataTable().DefaultView.ToTable(true, "ColumnB");
    

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

    享受。

    于 2014-08-26T18:52:37.403 回答
    -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

    于 2013-06-03T14:35:11.280 回答