如果我的数据是List<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
我该怎么做?
我首先考虑创建三个查询:
var band1 = myList.Where(c => c <= 3);
var band2 = myList.Where(c => c => 4 && c <= 8);
var band3 = myList.Where(c => c >= 9);
但后来我不知道如何使用LINQ组合结果,因为我有三个IEnumerable<Cat>
。
使用正确的方法是什么,或者我必须使用foreach
?
答案 0 :(得分:2)
通过它创建一个GetRange(Cat cat)
方法对您的列表进行排序:
myCatList.OrderBy(cat=>GetRange(cat));
答案 1 :(得分: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);
答案 2 :(得分: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;
});
答案 3 :(得分:0)
//define your ranges
var ranges = new[] { 3,8,10};
var grouped = listOfCats.GroupBy( x => ranges.FirstOrDefault( r => r >= x.Age ) );
答案 4 :(得分: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();