10

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

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

4

5 回答 5

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();

那行吗?

于 2009-04-01T18:54:52.070 回答
11

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

如何在没有匿名类型的情况下通过多个字段区分 LINQ

从 objEntity 中的 o 返回

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

这将为您提供EntityObject而不是AnonymousType

于 2011-05-27T08:37:41.107 回答
5

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

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

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

于 2009-04-01T18:54:32.510 回答
2

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

var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
于 2017-11-20T17:02:59.820 回答
1

var qry = (from cust in db.Customers select new {cust.ID, cust.Name, cust.Region}).GroupBy(x => new { x.Name,x.Region}).select(z => z .OrderBy(i => i.cust).FirstOrDefault()).ToList();

于 2015-09-09T14:51:06.320 回答