Foo().OrderBy(x=> x.Name)
如果我希望按照这种方式对集合进行排序,但是正好一个具有Id ==(比如314)的元素应始终位于开头,无论其名称如何。
答案 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));