Как отсортировать список на основе заданной последовательности одного поля?C#

Место общения программистов C#
Ответить
Anonymous
 Как отсортировать список на основе заданной последовательности одного поля?

Сообщение Anonymous »

У меня есть список, считанный из базы данных, что-то вроде:

var managers = _repo.Where(xxxx).ToList();


данные менеджеров отображаются в формате json

[
{
"id":"b2071b2d-3d1a-4403-b044-0a59514c4431",
"name":"Lucy",
"mobile":"xxx"
},
{
"id":"639c108f-ec00-4fcd-814a-c3859930b1c1",
"name":"Franck",
"mobile":"xxx2"
},
{
"id":"943b2ad4-8ef0-4cf7-824e-de3a7837a1cd",
"name":"Jerry",
"mobile":"xxx3"
}
]




Теперь мне нужно изменить порядок этого списка по заданной последовательности имен, например:

var orderByName = _svc.GetManagerSortOrder(); // ["Jerry","Lucy","Franck"]


Сейчас я использую foreach, чтобы написать код. Есть ли лучший способ?

Вот мое текущее решение:

var orderByName = new List() { "Franck", "Jerry" };
var sortedManagers = new List();
foreach(string orderName in orderByName) // loop, and sort manager list based on a given name list
{
var manager = managers.Where(a => a.name == orderName).FirstOrDefault();
if (manager == null)
continue;
sortedManagers.Add(manager);
}

if(sortedManagers.Count != managers.Count) // if counts not equal, there is someone not on the name list, so these men need to be appended to the sortedManagers list
{
var sortedManagersId = sortedManagers.Select(s => s.id);
var managersNotInclude = managers.Where(a => !sortedManagersId.Contains(a.id)).ToList();
sortedManagers = sortedManagers.Concat(managersNotInclude).ToList();
}


Подробнее здесь: https://stackoverflow.com/questions/621 ... -one-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»