LINQ to DataSet, distinct by multiple columns

本小妞迷上赌 提交于 2019-11-27 12:46:42

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!