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