LINQ to DataSet, distinta da più colonne
-
22-08-2019 - |
Domanda
Volevo solo controllare se c'è modo di fare distinta base a più colonne. Grazie in anticipo !!!
A proposito, ho trovato una grande estensione LINQ qui ma hanno bisogno di una guida per utilizzarlo per più colonne
Soluzione
Bene, 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?
Altri suggerimenti
Invece di Distinto è possibile utilizzare Groupby e quindi selezionando il record I più di ogni gruppo
Come LINQ distinto da più campi senza anonima tipi
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 vi darà la EntityObject Piuttosto che il AnonymousType
Con il termine "distinta base a più colonne" ciò che si intende è un gruppo da.
Quando chiedete distinti, vuol dire che hai trovato tutte le righe distinte, o, un gruppo utilizzando tutte le colonne della tabella.
Se si desidera ottenere solo raggruppamenti distinti per un sottoinsieme delle colonne, quindi utilizzare un gruppo nella vostra clausola, specificando le colonne per il raggruppamento. Quindi, selezionare i gruppi, come si desidera solo un set di chiavi per ogni gruppo.
Un'altra opzione facile è quella di creare una singola stringa distinta.
var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
var query = (da cisti in db.Customers selezionare nuova {cust.ID, cust.Name, cust.Region}). GroupBy (x => new {x.Name, x.Region}). Selezionare (z => z.OrderBy (i => i.cust) .FirstOrDefault ()) ToList ();.