2009-04-01 15 views

risposta

31

Beh, si può fare la proiezione prima:

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

O in sintassi di query:

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

Che fare?

5

Per "distinta base a più colonne" che cosa realmente significa è un gruppo da.

Quando chiedi distinti, significa che stai ricevendo TUTTE le righe distinte, oppure, un gruppo utilizzando tutte le colonne nella tabella.

Se si desidera ottenere solo raggruppamenti distinti per un sottoinsieme delle colonne, quindi utilizzare un gruppo per nella clausola, specificando le colonne per raggruppare per. Quindi, seleziona i gruppi, poiché desideri un solo set di chiavi per ogni gruppo.

11

Invece di Distinto è possibile utilizzare Groupby e quindi selezionando il record I più di ogni gruppo

How to LINQ Distinct by Multiple Fields without anonymous types

ritorno da o in objEntity

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

Questo ti darà il EntityObject Piuttosto che il AnonymousType

1

var qry = (dalla Cust in db.Customers selezionare nuova {cust.ID, cust.Name, cust.Region}). GroupBy (x => new {x. Nome, x.Regione}). Selezionare (z => z.OrderBy (i => i.cust) .FirstOrDefault()). ToList();

2

Un'altra opzione facile è creare una singola stringa distinta.

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