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

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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