Linq - продвинутый .OrderBy - PullRequest
7 голосов
/ 23 июня 2011
Foo().OrderBy(x=> x.Name)

Что, если я хочу, чтобы коллекция сортировалась таким образом, но ровно один элемент с Id == (скажем, 314) всегда должен быть в начале, независимо от его имени.

Ответы [ 3 ]

21 голосов
/ 23 июня 2011

Вы можете отсортировать его в два раунда:

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

Может быть, это даже проще (при условии, что логическое значение false искажено до логического значения true)

Foo().OrderBy(x => x.Id != 314).ThenBy(x => x.Name)
3 голосов
/ 23 июня 2011

Лично я бы обработал это потом на клиенте, но если вы хотите использовать LINQ, я бы, вероятно, избежал Concat - это будет более сложный запрос. Я бы пошел на:

int id = 314;
var data = Foo().OrderBy(x => x.Id == id ? 0 : 1).ThenBy(x => x.Name)
1 голос
/ 23 июня 2011

Попробуйте использовать Union:

var foo = Foo();
foo.Where(x => x.id == 314).Union(foo.OrderBy(x => x.Name));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...