Как сделать 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?

Я получаю сообщение:

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

+87
источник поделиться
3 ответа

The Distinct() собирается испортить заказ, поэтому после сортировки вам придется сортировать.

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);
+147
источник
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();
+19
источник

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

var uniqueColors = (from dbo in database.MainTable
                    where dbo.Property
                    orderby dbo.Color.Name ascending
                    select dbo.Color.Name).Distinct();
+10
источник

Посмотрите другие вопросы по меткам или Задайте вопрос