使用LINQ在C#中对列表进行排序

56 c# linq

我想在C#中对列表进行排序.

就像结构属性AVC转到true那样先显示它们然后AVC变为false.有没有办法在C#LINQ中执行此操作?

Jon*_*eet 113

那么,使用LINQ最简单的方法是这样的:

list = list.OrderBy(x => x.AVC ? 0 : 1)
           .ToList();
Run Code Online (Sandbox Code Playgroud)

要么

list = list.OrderByDescending(x => x.AVC)
           .ToList();
Run Code Online (Sandbox Code Playgroud)

相信bool价值的自然顺序是false < true,但第一种形式使IMO更清晰,因为每个人都知道0 < 1.

请注意,这不会对原始列表本身进行排序 - 它将创建一个新列表,并将引用分配回list变量.如果要进行排序,则应使用该List<T>.Sort方法.


Ani*_*Ani 17

像这样?

在LINQ中:

var sortedList = originalList.OrderBy(foo => !foo.AVC)
                             .ToList();
Run Code Online (Sandbox Code Playgroud)

或就地:

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));
Run Code Online (Sandbox Code Playgroud)

正如Jon Skeet所说,这里的诀窍是知道false被认为比'更小'true.

如果您发现在代码中的许多不同位置执行这些排序操作,您可能希望获得类型Foo来实现IComparable<Foo>IComparable接口.


Guf*_*ffa 10

我假设你希望它们按其他东西排序,以便在AVC相同的所有项目之间获得一致的排序.例如按名称:

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)