Linq заказ по названию области с одним исключением - PullRequest
3 голосов
/ 23 августа 2011

Привет, скажи, что у меня есть объекты типа Area с именами:

Hokitika Данидин Остров Стюарт западное побережье Инверкаргилл

и я хочу заказать их по имени, которое я мог бы пойти:

areas.OrderBy(a => a.Name)

чтобы дать мне:

Данидин Хокитика Инверкаргилл Остров Стюарт Западное побережье

это хорошо, но что сказать, что я хотел сделать это упорядоченным списком, за исключением того, что местоположение текущих пользователей было наверху, поэтому, если бы они были в Invercargill, список был бы:

Инверкаргилл Данидин Хокитика Остров Стюарт Западное побережье

Возможно ли это в Линке?

Ответы [ 3 ]

1 голос
/ 23 августа 2011

Конечно.Вы можете заказать по bool:

areas.OrderByDescending(a => a.Equals(myArea, StringComparison.OrdinalIgnoreCase))
     .ThenBy(a => a.Name);

Если это не работает на вашей БД, вы можете попробовать:

areas.Select(a => new { IsMyLocation = a.Equals(myArea, StringComparison.OrdinalIgnoreCase),
                        Area = a })
     .OrderByDescending (a => a.IsMyLocation)
     .Select(a => a.Area);
0 голосов
/ 23 августа 2011

Просто еще один способ сделать это, используя Except

var currentLocation = new [] { user.CurrentLocation };

var otherAreas = areas.Except(currentLocation).OrderBy(x => x.Name)

var finalResult = currentLocation.Concat(otherAreas);
0 голосов
/ 23 августа 2011
string currentLocation = "Invercatgill"; // for instance

var sortedresult = areas.OrderBy(a => a.Name.Equals(currentLocation) ? 0 : 1)
                        .ThenBy(a => a.Name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...