2016-11-17 1 views
0

で[並べ替えを使用するためにどのように私は2つのカラムを持つPersonという名前のテーブルを持っています。はEntityFramework

次のコードは、私の結果を注文しません:

var persons = from p in MyContext.Persons.OrderBy(x=>x.PersonName) select p; 

var res = persons.Distnct().ToArray(); 

はその段階で順序を実行することが可能です(私は2番目の行にOrderByを動かすことを知っている - 評価後 - オーダーを行います) ?

答えて

3

なし

var result = (from p in MyContext.Persons 
        select new 
        { 
         p.PersonName 
        }).Distinct().OrderBy(x => x.PersonName).ToArray(); 

ソリューション:

明確な(...)メソッドが含まれてい順不同シーケンスを返します重複する値はありません。

したがって、同じ順序を保つことは保証されません。
.Distinct()の後に保証された注文が必要な場合は、唯一の方法は.OrderBy()を再度適用することです。

参考:
https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx

0

このお試しください:LINQのドキュメントは言うLINQ

var result = MyContext.Persons.Select(a => new { a.name }).Distinct().OrderBy(a => a.name).ToArray(); 
+0

あなたの 'Distinct'は' OrderBy'の順序を破壊します。注文を元に戻す必要があります。 – Sefe

1

あなたはORDER BYおよび単一のクエリで個別の両方を含めることができます。それは私にとってうまく動作します:

var persons = MyContext.Persons.OrderBy(x => x.Name).Select(x => x.Name).Distinct(); 

あなたがそれを配列に変換したいなら、ToArray()メソッドを使います。