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

我想在C#中对列表进行sorting。

就像结构属性AVC变为true的地方一样,先显示它们,然后AVC变成false。 有没有办法在C#LINQ做到这一点?

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

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

要么

 list = list.OrderByDescending(x => x.AVC) .ToList(); 

相信 bool值的自然sorting是false < true ,但是第一种forms使IMO更清晰,因为每个人都知道0 < 1

请注意,这不会对原始列表本身进行sorting – 它将创build一个新列表,并将该参考分配回listvariables。 如果你想sorting,你应该使用List<T>.Sort方法。

喜欢这个?

在LINQ中:

 var sortedList = originalList.OrderBy(foo => !foo.AVC) .ToList(); 

或就地:

 originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC)); 

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

如果您发现您在代码中的许多不同位置执行这些sorting操作,则可能需要让您的Footypes实现IComparable<Foo>IComparable接口。

我假设你想让他们按其他东西sorting,以获得AVC是相同的所有项目之间的一致的顺序。 例如按名称:

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