问题
Just wanted to check if there is way to do distinct by multiple columns. Thanks in advance!!!
BTW, I found a great LINQ extension here but need some guidance to use it for multiple columns
回答1:
Well, you can do the projection first:
var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region})
.Distinct();
Or in query syntax:
var qry = (from cust in db.Customers
select new {cust.ID, cust.Name, cust.Region}).Distinct();
That do?
回答2:
Instead of Distinct you can use Groupby and then selecting the Top Most record of each group
How to LINQ Distinct by Multiple Fields without anonymous types
return from o in objEntity
group o by new { o.Field1, o.Field2, o.Field3, o.Field4, o.Field5 } into grp select grp.FirstOrDefault();
This will give you the EntityObject Rather than the AnonymousType
回答3:
By "distinct by multiple columns" what you really mean is a group by.
When you ask for distinct, it means that you are getting ALL the distinct rows, or, a group by using all the columns in the table.
If you want to only get distinct groupings for a subset of the columns, then use a group by in your clause, specifying the columns to group by. Then, select the groups, as you only want one set of keys for each group.
回答4:
Another easy option is to create a single distinct string.
var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
回答5:
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();
来源:https://stackoverflow.com/questions/706866/linq-to-dataset-distinct-by-multiple-columns