c# - 如何对通用列表中的部分项目进行排序

标签 c# linq list sorting

我有一个 List 对象,其中包含以下类型的项目

public class Item{

    public int Type; //this can be only 0 or 1
    public string Text;


}

我想先按类型对整个列表进行排序,然后再按文本对类型为 1 的项目进行另一次排序?

如何实现?

非常感谢

最佳答案

这是我的做法。

var ordered = list.OrderBy(i => i.Type == 0 ? "" : i.Text);

这是假设没有空文本字符串,其中 i == 0。如果您不能做出该假设,则以下方法可行:

var ordered = list.OrderBy(i => i.Type).ThenBy(i => i.Type == 0 ? "" : i.Text);

通过为所有类型为 0 的项目赋予相同的值,您将保留它们的初始顺序,同时按其文本值对其他项目进行排序。

旁注,这是一种代码味道:

public int Type; //this can be only 0 or 1

乍一看,这听起来应该是 bool 值或自定义 enum 类型。在深入了解您要执行的操作后,听起来您可能不希望 Text 在 Type 为 0 时甚至成为合法值。如果是这种情况,您应该考虑使用类继承来实际区分一种项目类型和另一种项目类型。

关于c# - 如何对通用列表中的部分项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496956/

相关文章:

c# - 如何配置 TeamCity 以同时运行测试而不是一个接一个地运行?

c# - MVC 5 登录自定义数据库

c# - 结构与类,字符串和列表?

c# - LINQ 查询以选择与成对数组匹配的行

c# - 使用 Dynamic Linq 库运行总和

c# - HtmlAgilityPack : xpath and regex

python - 在输入中连接的列表和文本

python - 列表索引给出错误的值?

java - 如何获得Java中列表列表中元素的差异?

c# - Linq 2 SQL查询优化