How can I do SELECT UNIQUE with LINQ?
SqlVisual StudioLinqSelectUniqueSql Problem Overview
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.
Sql Solutions
Solution 1 - Sql
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);
Solution 2 - Sql
var uniqueColors = (from dbo in database.MainTable
where dbo.Property == true
select dbo.Color.Name).Distinct();
Solution 3 - Sql
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();
Solution 4 - Sql
var unique = (from n in test group n by n into g where g.Count()==1 select g.Key.ToString());