Tutorial :LINQ to DataSet, distinct by multiple columns



Question:

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


Solution: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?


Solution: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


Solution: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.


Solution:4

Another easy option is to create a single distinct string.

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


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


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