2009-04-01 5 views

Répondre

31

Eh bien, vous pouvez faire la projection première:

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

Ou dans la syntaxe de requête:

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

Ce faire?

5

par « plusieurs colonnes distinctes par » ce que vous voulez vraiment dire est un groupe par.

Lorsque vous demandez distinct, cela signifie que vous obtenez TOUTES les lignes distinctes, ou, un groupe en utilisant toutes les colonnes de la table.

Si vous souhaitez obtenir uniquement des regroupements distincts pour un sous-ensemble de colonnes, utilisez un groupe dans votre clause, en spécifiant les colonnes à regrouper. Ensuite, sélectionnez les groupes, car vous ne voulez qu'un jeu de clés pour chaque groupe.

11

Au lieu de Distinct vous pouvez utiliser Groupby, puis en sélectionnant l'enregistrement le plus haut de chaque groupe

How to LINQ Distinct by Multiple Fields without anonymous types

retour o objEntity

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

Cela vous donnera le EntityObject Plutôt que la AnonymousType

1

var qry = (à partir Cust dans db.Customers sélectionnez Nouveau {cust.ID, cust.Name, cust.Region}). GroupBy (x => {x nouveau. Nom, x.Region}). Select (z => z.OrderBy (i => i.cust) .FirstOrDefault()). ToList();

2

Une autre option simple consiste à créer une seule chaîne distincte.

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