LINQ to DataSet, различаемый несколькими столбцами - PullRequest
10 голосов
/ 01 апреля 2009

Просто хотел проверить, есть ли способ сделать различие по нескольким столбцам. Заранее спасибо !!!

Кстати, я нашел отличное расширение LINQ здесь , но нужно несколько советов, чтобы использовать его для нескольких столбцов

Ответы [ 5 ]

31 голосов
/ 01 апреля 2009

Ну, вы можете сначала сделать проекцию:

var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region})
                    .Distinct();

Или в синтаксисе запроса:

var qry = (from cust in db.Customers
          select new {cust.ID, cust.Name, cust.Region}).Distinct();

Что делать?

11 голосов
/ 27 мая 2011

Вместо Distinct вы можете использовать Groupby, а затем выбрать запись Top Most каждой группы

Как связать LINQ по нескольким полям без анонимных типов

возврат от o в объекте

              group o by new
              {
                  o.Field1,
                  o.Field2,
                  o.Field3,
                  o.Field4,
                  o.Field5
              } into grp
              select grp.FirstOrDefault();

Это даст вам EntityObject Вместо AnonymousType

5 голосов
/ 01 апреля 2009

Под "различимыми по нескольким столбцам" вы на самом деле подразумеваете группу.

Когда вы запрашиваете разные, это означает, что вы получаете ВСЕ отдельные строки или группу, используя все столбцы в таблице.

Если вы хотите получить отдельные группировки только для подмножества столбцов, используйте группу в своем предложении, указав столбцы для группировки. Затем выберите группы, так как вам нужен только один набор ключей для каждой группы.

2 голосов
/ 20 ноября 2017

Другим простым вариантом является создание отдельной отдельной строки.

var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
1 голос
/ 09 сентября 2015

var qry = (от cust в дБ. Клиенты выберите новый {cust.ID, cust.Name, cust.Region}). GroupBy (x => new {x.Name, x.Region}). select (z => z.OrderBy (i => i.cust) .FirstOrDefault ()) ToList ();.

...