103 votes

Comment puis-je faire une sélection UNIQUE avec LINQ?

J'ai une liste comme ceci:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

Je suis en train de faire une sélection UNIQUE avec LINQ, c'est à dire que je veux

Red
Brown
Yellow
Green
Orange

var uniqueColors = from dbo in database.MainTable 
                   where dbo.Property == true 
                   select dbo.Color.Name;

J'ai ensuite changé de ce

var uniqueColors = from dbo in database.MainTable 
                   where dbo.Property == true 
                   select dbo.Color.Name.Distinct();

sans succès. Le 1er sélectionner obtient TOUTES les couleurs, alors comment puis-je modifier pour obtenir uniquement les valeurs uniques?

Si il ya une meilleure façon de structurer cette requête, plus qu'heureux de poursuivre dans cette voie.

Edit: merci. Comment dois-je aller sur la modification afin que je puisse avoir .OrderBy (colonne "nom" ) c'est à dire par ordre alphabétique par nom de la couleur, le nom de la propriété. Je reçois un message:

The type arguments cannot be inferred from the usage. Try specificying the type arguments explicitly.

170voto

James Curran Points 55356

Le Distinct() va gâcher la commande, de sorte que vous aurez à le tri après.

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);

21voto

jwendl Points 769
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();

10voto

pickles Points 4235

À l'aide de la requête de compréhension de la syntaxe que vous pourriez réaliser la orderby comme suit:

var uniqueColors = (from dbo in database.MainTable
                    where dbo.Property
                    orderby dbo.Color.Name ascending
                    select dbo.Color.Name).Distinct();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X