13

LINQ(to EF)を使用してDISTINCTリストを取得し、それを並べ替えようとしています。私が見つけたすべての例は、DISTINCT値に基づいて結果をソートします。しかし、私はそれを別のフィールドでソートしたいと思います。

例:2つのフィールド(canvasSizeとcanvasLength)を持つテーブル。

var sizes = (from s in ent.competitors                         
             select s.canvasSize).Distinct().OrderBy(x => x);

私が見つけたすべての例は、このタイプの答えを示しています。ただし、canvasSizeで並べ替えますが、canvasLengthで並べ替えます。

私は立ち往生しています...どんなヒントも大歓迎です...

J.スキート射撃による>追加情報:

company  canvasSize  canvasLength

abc       8x10         8
d         8x10         8
e         10x10        10
f         10x10        10
g         40x40        40

私はそれをcanvasSizeで区別したいと思います。問題は、ソートすると次の順序になることです。

10x10
40x40
8x10  

同じ結果セットが必要ですが、canvasLengthを使用して並べ替えたため、結果は次のようになります。

8x10
10x10
40x40
4

2 に答える 2

17

私はあなたが求めているものはこのようなものかもしれないと思います:

var sizes = (from s in ent.competitors                         
             select new { s.canvasSize, s.canvasLength })
            .Distinct()
            .OrderBy(x => x.canvasLength);

アップデート

あなたの質問の追加情報に基づいて、以下はあなたが望むことをするはずです:

var sizes = ent.competitors
               .Select(c => new {c.canvasSize, c.canvasLength})
               .Distinct()
               .OrderBy(x => x.canvasLength)
               .Select(x => x.CanvasSize)
于 2013-01-31T22:19:42.543 に答える
2
var sizes = ent.competitors
               .GroupBy(s => s.canvasSize)
               .Select(g => g.First())
               .OrderBy(s => s.canvasLength);
于 2013-01-31T22:18:45.453 に答える