带LINQ的C#排序列表

带LINQ的C#排序列表,c#,linq,C#,Linq,我想用C对列表进行排序 比如结构属性AVC变为true,然后首先显示它们,然后AVC变为false。在C#LINQ中有什么方法可以做到这一点吗?好吧,使用LINQ最简单的方法如下: list = list.OrderBy(x => x.AVC ? 0 : 1) .ToList(); 或 我相信bool值的自然顺序是false

我想用C对列表进行排序


比如结构属性AVC变为true,然后首先显示它们,然后AVC变为false。在C#LINQ中有什么方法可以做到这一点吗?

好吧,使用LINQ最简单的方法如下:

list = list.OrderBy(x => x.AVC ? 0 : 1)
           .ToList();

我相信
bool
值的自然顺序是
false
,但在我看来,第一种形式更清楚,因为每个人都知道
0<1

请注意,这不会对原始列表本身进行排序-它将创建一个新列表,并将引用分配回
list
变量。如果要就地排序,应使用此方法。

像这样吗

在林克:

var sortedList = originalList.OrderBy(foo => !foo.AVC)
                             .ToList();
或在适当的地方:

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));
正如Jon Skeet所说,这里的诀窍是知道
false
被认为比
true“小”。


如果您发现您正在代码中的许多不同位置执行这些排序操作,那么您可能希望使用类型
Foo
来实现
IComparable
IComparable
接口

我假设您也希望它们按其他方式排序,以便在AVC相同的所有项目之间获得一致的排序。例如,按名称:

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();

这里需要.ToList()吗?@KrishnaPS:是的,假设
list
的编译时类型是
list
。否则,您将尝试将
IEnumerable
分配给
列表
变量。如果您只需要一个序列,而该序列在每次迭代时都会被惰性地计算,那么您就不需要它了。谢谢!那么order by返回一个延迟计算的列表?我是不是遗漏了什么?对不起,我弄糊涂了?我面临的情况是,我对列表进行了排序,并将其作为IEnumerable返回,如上所述,但是,当我对返回的列表执行“for each”以更改值时,我发现顺序被中断。@KrishnaPS:
OrderBy
返回序列,而不是列表。听起来你应该问一个新问题来证明你的问题。请帮我回答我发布的这个问题
var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();