Сортировка одного списка другим

У меня есть 2 объекта списка, один – только список int, другой – список объектов, но объекты имеют свойство ID.

Я хочу, чтобы сортировать список объектов по его идентификатору в том же порядке сортировки, что и список int.

Я некоторое время играл вокруг, пытаясь заставить его работать, до сих пор нет радости,

Вот что я до сих пор …

//************************** //*** Randomize the list *** //************************** if (Session["SearchResultsOrder"] != null) { // save the session as a int list List IDList = new List((List)Session["SearchResultsOrder"]); // the saved list session exists, make sure the list is orded by this foreach(var i in IDList) { SearchData.ReturnedSearchedMembers.OrderBy(x => x.ID == i); } } else { // before any sorts randomize the results - this mixes it up a bit as before it would order the results by member registration date List RandomList = new List(SearchData.ReturnedSearchedMembers); SearchData.ReturnedSearchedMembers = GloballyAvailableMethods.RandomizeGenericList(RandomList, RandomList.Count).ToList(); // save the order of these results so they can be restored back during postback List SearchResultsOrder = new List(); SearchData.ReturnedSearchedMembers.ForEach(x => SearchResultsOrder.Add(x.ID)); Session["SearchResultsOrder"] = SearchResultsOrder; } 

Все дело в том, что, когда пользователь ищет участников, изначально они отображаются в произвольном порядке, а затем, если они нажимают на страницу 2, они остаются в этом порядке и отображаются следующие 20 результатов.

Я читал о ICompare, который я могу использовать в качестве параметра в предложении Linq.OrderBy, но я не могу найти простых примеров.

Я надеюсь на элегантное, очень простое решение стиля LINQ, и я всегда могу надеяться.

Любая помощь очень ценится.

Другой подход LINQ:

  var orderedByIDList = from i in ids join o in objectsWithIDs on i equals o.ID select o; 

Один из способов сделать это:

 List order = ....; List items = ....; Dictionary d = items.ToDictionary(x => x.ID); List ordered = order.Select(i => d[i]).ToList(); 

Не ответ на этот точный вопрос, но если у вас есть два массива , возникает перегрузка Array.Sort который берет массив для сортировки и массив, используемый в качестве «ключа»,

https://msdn.microsoft.com/en-us/library/85y6y2d3.aspx

Метод Array.Sort (массив, массив)
Сортирует пару одномерных объектов Array (один содержит ключи, а другой содержит соответствующие элементы) на основе ключей в первом массиве, используя реализацию IComparable каждого ключа.

Join – лучший кандидат, если вы хотите совместить точное целое число (если совпадение не найдено, вы получаете пустую последовательность). Если вы хотите просто получить порядок сортировки другого списка (и при условии, что количество элементов в обоих списках равно), вы можете использовать Zip .

 var result = objects.Zip(ints, (o, i) => new { o, i}) .OrderBy(x => xi) .Select(x => xo); 

Довольно читаемый.

Вот метод расширения, который инкапсулирует ответ Саймона Д. на списки любого типа.

 public static IEnumerable SortBy(this IEnumerable sortItems, IEnumerable sortKeys, Func matchFunc) { return sortKeys.Join(sortItems, k => k, matchFunc, (k, i) => i); } 

Использование – это что-то вроде:

 var sorted = toSort.SortBy(sortKeys, i => i.Key); 

Одно из возможных решений:

 myList = myList.OrderBy(x => Ids.IndexOf(x.Id)).ToList(); 

Примечание: используйте это, если вы работаете со списками In-Memory , не работает для типа IQueryable , поскольку IQueryable не содержит определения для IndexOf

  • Пользовательский одиночный выбор ListView
  • Выделить выбранную строку ListView
  • Как сортировать список по свойству в объекте
  • Итерация по всем парам последовательных элементов в списке
  • Изменение списка с использованием нотации среза
  • Преобразование списка кортежей в словарь
  • Эффективное пересечение двух List в Java?
  • Группировать список объектов по атрибуту: Java
  • Как преобразовать список корневых ключей в словарь?
  • Как инициализировать List для заданного размера (в отличие от емкости)?
  • OnItemClickListener не работает с элементом ListView, содержащим кнопку
  • Interesting Posts

    Может ли getDerivedStateFromProps использоваться в качестве альтернативы componentWillReceiveProps

    Исправлено фокусное изображение привязки / исчезновение в хроме при сочетании с преобразованием css

    Как объяснить результат выражения (++ x) + (++ x) + (++ x)?

    Удалить повторяющиеся строки, оставляя только самую старую строку?

    Сохранение контекстного меню правой кнопкой мыши

    PhpStorm – преимущества редактирования развернутых файлов напрямую, а также загрузка и синхронизация

    Как отключить кнопку редактирования, которая отображается в более общем разделе UITabBarController?

    андроидная анимация не завершена inAnimationEnd

    Как я могу запустить метод async Task синхронно?

    Как понять «терминал» директивы?

    Макет в памяти структуры. структура массивов и массив структур в C / C ++

    Вращение элемента анимации

    Фрагмент в ViewPager с использованием FragmentPagerAdapter пуст во второй раз

    Добавление исполняемого файла в список команд Linux

    Как перенаправить qDebug, qWarning, qCritical etc output?

    Давайте будем гением компьютера.