Tutorial :LINQ to DataSet, distinct by multiple columns


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


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?


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


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.


Another easy option is to create a single distinct string.

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


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

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »