I have 2 list objects, one is just a list of ints, the other is a list of objects but the objects has an ID property.
What i want to do is sort the list of objects by its ID in the same sort order as the list of ints.
Ive been playing around for a while now trying to get it working, so far no joy,
Here is what i have so far...
//************************** //*** Randomize the list *** //************************** if (Session["SearchResultsOrder"] != null) {     // save the session as a int list     List<int> IDList = new List<int>((List<int>)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<Member> RandomList = new List<Member>(SearchData.ReturnedSearchedMembers);     SearchData.ReturnedSearchedMembers = GloballyAvailableMethods.RandomizeGenericList<Member>(RandomList, RandomList.Count).ToList();      // save the order of these results so they can be restored back during postback     List<int> SearchResultsOrder = new List<int>();     SearchData.ReturnedSearchedMembers.ForEach(x => SearchResultsOrder.Add(x.ID));     Session["SearchResultsOrder"] = SearchResultsOrder; }      The whole point of this is so when a user searches for members, initially they display in a random order, then if they click page 2, they remain in that order and the next 20 results display.
I have been reading about the ICompare i can use as a parameter in the Linq.OrderBy clause, but i can’t find any simple examples.
I’m hoping for an elegant, very simple LINQ style solution, well I can always hope.
Any help is most appreciated.
Approach : Zip the two lists. Create a new, sorted list based on the zip using sorted(). Using a list comprehension extract the first elements of each pair from the sorted, zipped list.
Another LINQ-approach:
 var orderedByIDList = from i in ids                         join o in objectsWithIDs                        on i equals o.ID                        select o; 
                        One way of doing it:
List<int>  order = ....; List<Item> items = ....;  Dictionary<int,Item> d = items.ToDictionary(x => x.ID);  List<Item> ordered = order.Select(i => d[i]).ToList(); 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With