gpt4 book ai didi

c# - 通过任意排序表达式对列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:40 25 4
gpt4 key购买 nike

问题:

我有一个通用列表,如下所示:

System.Collections.Generic.List<Question> myquestions = new System.Collections.Generic.List<Question>();

我有一个分页示例,使用从数据库获取的 LINQ 表,执行此操作进行分页:

var questions = context.Questions
.OrderBy(sidx + " " + sord)
.Skip(pageIndex * pageSize)
.Take(pageSize);

现在,为了分页我从代码列表中填充的内容,我有:

var questionss = myquestions
.OrderBy(x => x.Id)
.Skip(pageIndex * pageSize)
.Take(pageSize);

我想要的是能够像上例中那样通过字符串对“myquestions”进行排序。这可能吗?

最佳答案

由于延迟执行,您可以在单独的语句中链接扩展方法,这意味着您可以根据条件添加不同的排序:

IOrderedQueryable<Question> sorted;
switch (sort) {
case "Id": sorted = myquestions.OrderBy(x => x.Id);
case "Name": sorted = myquestions.OrderBy(x => x.Name);
case "Size": sorted = myquestions.OrderBy(x => x.Size);
case "Id Desc": sorted = myquestions.OrderByDescending(x => x.Id);
case "Name Desc": sorted = myquestions.OrderByDescending(x => x.Name);
case "Size Desc": sorted = myquestions.OrderByDescending(x => x.Size);
default: throw new NotImplementedException();
}
var questions = sorted.Skip(pageIndex * pageSize).Take(pageSize);

您甚至可以添加二次排序(或者任意数量,在第一次之后它们都是一样的):

IOrderedQueryable<Question> sorted;
switch (sort) {
case "Id": sorted = myquestions.OrderBy(x => x.Id);
case "Name": sorted = myquestions.OrderBy(x => x.Name);
case "Size": sorted = myquestions.OrderBy(x => x.Size);
case "Id Desc": sorted = myquestions.OrderByDescending(x => x.Id);
case "Name Desc": sorted = myquestions.OrderByDescending(x => x.Name);
case "Size Desc": sorted = myquestions.OrderByDescending(x => x.Size);
default: throw new NotImplementedException();
}
switch (sort2) {
case "Id": sorted = sorted.ThenBy(x => x.Id);
case "Name": sorted = sorted.ThenBy(x => x.Name);
case "Size": sorted = sorted.ThenBy(x => x.Size);
case "Id Desc": sorted = sorted.ThenByDescending(x => x.Id);
case "Name Desc": sorted = sorted.ThenByDescending(x => x.Name);
case "Size Desc": sorted = sorted.ThenByDescending(x => x.Size);
}
var questions = sorted.Skip(pageIndex * pageSize).Take(pageSize);

关于c# - 通过任意排序表达式对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com