1

私のデータが aList<Cat>で、各猫の年齢が 10、9、8、7、6、5、4、3、2、1 の場合

範囲 1 ~ 3、4 ~ 8、9 ~ 10 に従ってリストを並べ替えたい

結果のリストが

3、2、1、8、7、6、5、4、10、9

どうやってやるの?

最初に、次の 3 つのクエリを作成することを検討しました。

var band1 = myList.Where(c => c <= 3);
var band2 = myList.Where(c => c => 4 && c <= 8);
var band3 = myList.Where(c => c >= 9);

しかし、3 つあるため、LINQ を使用して結果を組み合わせる方法がわかりませんIEnumerable<Cat>

使用する正しい方法は何ですか、または使用する必要がありforeachますか?

4

5 に答える 5

2

Concatを使用できます。

var band1 = myList.Where(c => c <= 3);
var band2 = myList.Where(c => c => 4 && c <= 8);
var band3 = myList.Where(c => c >= 9);

var result = band1.Concat(band2).Concat(band3);
于 2013-04-11T19:04:46.110 に答える
2

GetRange(Cat cat)リストを並べ替えるメソッドを作成します。

myCatList.OrderBy(cat=>GetRange(cat));
于 2013-04-11T19:02:51.073 に答える
1

これは、単一の LINQ ステートメントを使用して、求めていることを実行する方法です。

var ordered = items
    .OrderBy(x => {
        if(x <= 3) return 0;
        if(x <= 8) return 1;
        return 2;
    })
    .ThenByDescending(x => x);

または(アイテムがすでに降順になっていると仮定します):

var ordered = myList
    .OrderBy(x => {
        if (x <= 3) { return 1; }
        if (x <= 8) { return 2; }
        return 3;
    });
于 2013-04-11T19:08:29.273 に答える
0
//define your ranges  
var ranges = new[] { 3,8,10};

var grouped = listOfCats.GroupBy( x => ranges.FirstOrDefault( r => r >= x.Age ) );
于 2013-04-11T19:07:39.050 に答える
0

必要なのは、と連結することだけIEnumerable<int>ですIEnumerable<int>.Concat()

var band1 = myList.Where(c => c <= 3);
var band2 = myList.Where(c => c >= 4 && c <= 8);
var band3 = myList.Where(c => c >= 9);

List<int> finalList = band1.Concat(band2).Concat(band3).ToList();
于 2013-04-11T19:07:41.840 に答える