web-dev-qa-db-fra.com

Comment puis-je faire SELECT UNIQUE avec LINQ?

J'ai une liste comme celle-ci:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

J'essaie de faire un SELECT 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é cela en

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

sans succès. Le premier select obtient TOUTES les couleurs, comment puis-je le modifier pour obtenir uniquement les valeurs uniques?

S'il existe un meilleur moyen de structurer cette requête, vous serez ravi de suivre cette voie.

Comment procéder pour l’éditer afin que je puisse avoir .OrderBy ("nom de colonne") c’est-à-dire alphabétiquement par nom de couleur, ainsi nom propriété?

Je continue à recevoir un message:

Les arguments de type ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type.

92
baron

Le Distinct () va gâcher la commande, alors vous aurez à faire le tri après cela.

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

En utilisant la syntaxe de compréhension de requête, vous pouvez obtenir l'ordre suivant:

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