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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top