views:

70

answers:

3

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 1st 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.

Edit: thanks. 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 specificying the type arguments explicitly.

+5  A: 
var uniqueColors = (from dbo in database.MainTable where dbo.Property == true select dbo.Color.Name).Distinct();
jwendl
+1 but I suggest you use a code block for your code
Yoni H
+2  A: 

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();
erash
Hmm... that didn't achieve an alphabetic sort - for some reason... I switched ascending and descending and got the same result. Is the distinct statement affecting it? maybe it needs to be orderedby after that ?
baron
Could tryvar uniqueColors = from result in (from dbo in database.MainTable where dbo.Property select dbo.Color.Name).Distinct() orderby result ascending;
erash
+1  A: 

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);
James Curran
Thanks, this is the correct answer. Can someone please explain what goes in the .OrderBy() parameters. You have name=>name. Is that name coming from the column name in the DB? Because we have `dbo.Color.Name` then just `name=>name` which hints to me it is not the column name ? Bizarre it also sorts properly if I just change that to `.OrderBy(a=>a)`
baron
The name of the variable is irrelevant. It's just {object passed into function} => {object used to sort}. Since we have already done the Select, the only thing in the collection being sorted is the names.
James Curran