Linq - 先进.OrderBy

时间:2011-06-22 20:17:38

标签: c# linq c#-4.0

Foo().OrderBy(x=> x.Name)

如果我希望按照这种方式对集合进行排序,但是正好一个具有Id ==(比如314)的元素应始终位于开头,无论其名称如何。

3 个答案:

答案 0 :(得分:21)

您可以在两轮中对其进行排序:

Foo().OrderBy(x => x.Id == 314 ? 0 : 1).ThenBy(x => x.Name)

也许这更简单(假设在布尔值为true之前运行布尔值假)

Foo().OrderBy(x => x.Id != 314).ThenBy(x => x.Name)

答案 1 :(得分:3)

我个人之后会在客户端处理它,但是如果你想要LINQ方式,那么我可能会避免使用Concat - 这将是一个更复杂的查询。我会去:

int id = 314;
var data = Foo().OrderBy(x => x.Id == id ? 0 : 1).ThenBy(x => x.Name)

答案 2 :(得分:1)

尝试使用Union

var foo = Foo();
foo.Where(x => x.id == 314).Union(foo.OrderBy(x => x.Name));