Reputation: 11181
I have a list like this:
Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange
I am trying to do a SELECT UNIQUE with LINQ, i.e. I want
Red
Brown
Yellow
Green
Orange
var uniqueColors = from dbo in database.MainTable
where dbo.Property == true
select dbo.Color.Name;
I then changed this to
var uniqueColors = from dbo in database.MainTable
where dbo.Property == true
select dbo.Color.Name.Distinct();
with no success. The first select
gets ALL the colors, so how do I modify it to only get the unique values?
If there is a better way of structuring this query, more than happy to go that route.
How do I go about editing it so I can have .OrderBy( "column name" )
i.e. alphabetically by color name, so name property?
I keep getting a message:
The type arguments cannot be inferred from the usage. Try specifying the type arguments explicitly.
Upvotes: 106
Views: 165706
Reputation: 103515
The Distinct()
is going to mess up the ordering, so you'll have to the sorting after that.
var uniqueColors =
(from dbo in database.MainTable
where dbo.Property == true
select dbo.Color.Name).Distinct().OrderBy(name=>name);
Upvotes: 176
Reputation: 952
var uniqueColors = (from dbo in database.MainTable
where dbo.Property == true
select dbo.Color.Name).Distinct();
Upvotes: 21
Reputation: 8503
Using query comprehension syntax you could achieve the orderby as follows:
var uniqueColors = (from dbo in database.MainTable
where dbo.Property
orderby dbo.Color.Name ascending
select dbo.Color.Name).Distinct();
Upvotes: 10