只是想检查是否有办法通过多列进行区分。在此先感谢!!!
BTW,我发现了一个很棒的LINQ扩展here,但需要一些指导才能将它用于多列
答案 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,然后选择每个组的最顶层记录
,而不是DistinctHow 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);