LINQ to DataSet,由多列区分

时间:2009-04-01 18:45:06

标签: linq distinct linq-to-dataset

只是想检查是否有办法通过多列进行区分。在此先感谢!!!

BTW,我发现了一个很棒的LINQ扩展here,但需要一些指导才能将它用于多列

4 个答案:

答案 0 :(得分:31)

嗯,你可以先做投影:

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();
那是吗?

答案 1 :(得分:11)

您可以使用Groupby,然后选择每个组的最顶层记录

,而不是Distinct

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

答案 2 :(得分:5)

通过“多列不同”,你真正的意思是分组。

当您要求distinct时,表示您通过使用表中的所有列获取所有不同的行或组。

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

答案 3 :(得分:2)

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

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