Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 288
Ganesha Avatar asked Apr 01 '09 18:04

Ganesha


3 Answers

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?

like image 143
Marc Gravell Avatar answered Nov 06 '22 21:11

Marc Gravell


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

like image 11
Pradeep Avatar answered Nov 06 '22 20:11

Pradeep


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.

like image 5
casperOne Avatar answered Nov 06 '22 20:11

casperOne