【问题标题】:LINQ to DataSet, distinct by multiple columnsLINQ to DataSet,由多列区分
【发布时间】:2010-10-16 22:50:24
【问题描述】:

只是想检查是否有办法通过多列来区分。提前谢谢!!!

顺便说一句,我找到了一个很棒的 LINQ 扩展 here,但需要一些指导才能将它用于多个列

【问题讨论】:

    标签: linq distinct linq-to-dataset


    【解决方案1】:

    另一个简单的选择是创建一个不同的字符串。

    var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
    

    【讨论】:

      【解决方案2】:

      var qry = (来自 db.Customers 中的 cust 选择新的 {cust.ID, cust.Name, cust.Region}).GroupBy(x => new { x.Name,x.Region}).select(z => z.OrderBy(i => i.cust) .FirstOrDefault()).ToList();

      【讨论】:

        【解决方案3】:

        您可以使用 Groupby 代替 Distinct,然后选择每个组的 Top Most 记录

        How to LINQ Distinct by Multiple Fields without anonymous types

        从 objEntity 中的 o 返回

                      group o by new
                      {
                          o.Field1,
                          o.Field2,
                          o.Field3,
                          o.Field4,
                          o.Field5
                      } into grp
                      select grp.FirstOrDefault();
        

        这将为您提供 EntityObject 而不是 AnonymousType

        【讨论】:

          【解决方案4】:

          好吧,你可以先做投影:

          var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region})
                              .Distinct();
          

          或者在查询语法中:

          var qry = (from cust in db.Customers
                    select new {cust.ID, cust.Name, cust.Region}).Distinct();
          

          这样做?

          【讨论】:

            【解决方案5】:

            “通过多列区分”您真正的意思是分组依据。

            当您要求不同时,这意味着您将获得所有不同的行,或者通过使用表中的所有列获得一个组。

            如果您只想对列的子集进行不同的分组,请在子句中使用 group by,指定要分组的列。然后,选择组,因为每个组只需要一组键。

            【讨论】:

              猜你喜欢
              • 2012-02-20
              • 2011-01-27
              • 2010-12-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-16
              • 1970-01-01
              相关资源
              最近更新 更多