【问题标题】:How to get Distinct on a specific column如何在特定列上获得 Distinct
【发布时间】:2023-04-08 06:57:01
【问题描述】:

我想通过数据表上的特定 field(ID) 而不是整行来区分如何做到这一点:

我的表结构:

 ID -- name -- desc

代码:

DataTable dt = table.AsEnumerable()
    .Distinct(DataRowComparer.Default)//I want to distinct by id instead
    .CopyToDataTable();

【问题讨论】:

  • 所以结果数据表将只有 ID?
  • id 应该已经不同了,这就是主键的工作方式...
  • 只需按 id 对数据进行分组。我想不出其他任何东西来按不同的 ID 选择所有数据......
  • Group By 就是要走的路。您必须决定要对具有多次相同 ID(聚合 (max, min, avg) / first / last )的行执行什么操作。

标签: c# asp.net linq datatable distinct


【解决方案1】:

如果您的意思是想要一个不同值的列表,这里是一个示例:

List<Int32> fieldList = (from r in dt.AsEnumerable()SELECT Int32.Parse(r["ID"].ToString())).Distinct().ToList();

【讨论】:

    【解决方案2】:

    我不知道这是否是您想要的,但您可以使用 IEqualityComparer 将忽略所有具有相同 Id 的行

    DataTable dt = table.AsEnumerable().Distinct(new MyComparer<YourClass>())
                   .CopyToDataTable()
    

    与:

        class MyComparer<T> : IEqualityComparer<T> where T : YourClass
        {
            public bool Equals(T x, T y)
            {
                return x.Id.Equals(y.Id);
            }
    
            public int GetHashCode(T obj)
            {
                return obj.Id.GetHashCode();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2011-03-31
      • 2020-03-03
      • 2010-10-04
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多