it-swarm.com.ru

Как я могу сделать SELECT UNIQUE с LINQ?

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

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?

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

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

92
baron

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

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

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

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