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

时间:2010-10-23 11:57:21

标签: c# linq

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

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

3 个答案:

答案 0 :(得分:108)

嗯,使用LINQ最简单的方法就是这样:

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

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

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

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

答案 1 :(得分:17)

喜欢这个吗?

在LINQ中:

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

或就地:

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

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

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

答案 2 :(得分:10)

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

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