web-dev-qa-db-ja.com

LINQでSELECT UNIQUEを実行するにはどうすればよいですか?

私はこのようなリストを持っています:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

私はLINQでSELECT UNIQUEをしようとしています、つまり

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( "列名")を持つように編集するにはどうすればいいですか?つまり、色名のアルファベット順で、名前プロパティですか?

私はメッセージを受け取り続けます:

型引数を使用法から推測することはできません。型引数を明示的に指定してみてください。

92
baron

Distinct()は順序付けを台無しにするので、その後はソートする必要があります。

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

クエリ内包構文を使用すると、次のように順序を達成できます。

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