LINQ to DataSet, distinct by multiple columns

34,602

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

Share:
34,602
Hans.Gundlach
Author by

Hans.Gundlach

Updated on November 21, 2020

Comments

  • Hans.Gundlach
    Hans.Gundlach over 3 years

    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