2009-04-01 5 views

ответ

31

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

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

Что делать?

5

К «отличаются по нескольким столбцам», что вы на самом деле означает это группа по.

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

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

11

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

How to LINQ Distinct by Multiple Fields without anonymous types

возвращение из о в objEntity

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

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

1

вар QRY = (от каст в db.Customers выберите новый {cust.ID, cust.Name, cust.Region}). GroupBy (х => новый {х. Имя, x.Region}). Select (z => z.OrderBy (i => i.cust) .FirstOrDefault()). ToList();

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^