Сортировка списка из другого идентификатора списка

У меня есть список с такими идентификаторами:

List docIds = new List() { 6, 1, 4, 7, 2 }; 

Morover, у меня есть еще один список элементов , которые представлены идентификаторами, описанными выше.

 List docs = GetDocsFromDb(...) 

Мне нужно сохранить один и тот же порядок в обеих коллекциях, так что элементы в List должны находиться в том же положении, что и в первом (из-за причины подсчета поисковой системы). И этот процесс не может быть выполнен в функции GetDocsFromDb() .

При необходимости можно изменить второй список на другую структуру (например, Dictionary ), но я бы предпочел не изменять его.

Есть ли простой и эффективный способ сделать это «упорядочение в зависимости от некоторых идентификаторов» с LINQ?

     docs = docs.OrderBy(d => docsIds.IndexOf(d.Id)).ToList(); 

    Поскольку вы не указываете T ,

     IEnumerable OrderBySequence( this IEnumerable source, IEnumerable order, Func idSelector) { var lookup = source.ToDictionary(idSelector, t => t); foreach (var id in order) { yield return lookup[id]; } } 

    Является общим расширением за то, что вы хотите.

    Вы могли бы использовать расширение, как это возможно,

     var orderDocs = docs.OrderBySequence(docIds, doc => doc.Id); 

    Более безопасная версия может быть

     IEnumerable OrderBySequence( this IEnumerable source, IEnumerable order, Func idSelector) { var lookup = source.ToLookup(idSelector, t => t); foreach (var id in order) { foreach (var t in lookup[id]) { yield return t; } } } 

    который будет работать, если source не зацикливается точно с order .

    Одним простым подходом является zip с порядковой последовательностью:

     List docs = GetDocsFromDb(...).Zip(docIds, Tuple.Create) .OrderBy(x => x.Item2).Select(x => x.Item1).ToList(); 
    Давайте будем гением компьютера.