Как я могу сделать SELECT UNIQUE с LINQ? - PullRequest
92 голосов
/ 19 августа 2010

У меня есть такой список:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

Я пытаюсь сделать SELECT UNIQUE с LINQ, т.е. я хочу

Red
Brown
Yellow
Green
Orange

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

Затем я изменил это на

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

безуспешно. Первый select получает ВСЕ цвета, так как мне изменить его, чтобы получить только уникальные значения?

Если есть лучший способ структурирования этого запроса, более чем счастлив идти по этому пути.

Как мне отредактировать его, чтобы я мог иметь .OrderBy ("имя столбца"), то есть в алфавитном порядке по имени цвета, поэтому свойство name?

Я продолжаю получать сообщение:

Аргументы типа не могут быть выведены из использования. Попробуйте явно указать аргументы типа.

Ответы [ 3 ]

155 голосов
/ 19 августа 2010

Функция Distinct () испортит порядок, поэтому вам придется сортировать после этого.

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);
19 голосов
/ 19 августа 2010
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();
10 голосов
/ 19 августа 2010

Используя синтаксис понимания запросов, вы можете достичь порядка следующим образом:

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