I have two generic list objects, in which one contains ids and ordering, and the other a bunch of ids with each id in the second list having an id reference to the first list, for example;
public class OptionType {     public int ID { get; set; }     public int Ordering { get; set; } }  public class Option {     public int ID { get; set; }     public int Type_ID { get; set; } }      Obviously I can do a simple sort on a list of OptionTypes by doing
types_list.OrderBy(x => x.Ordering);   Question is though, how could I go about ordering an 'options_list' by utilising the 'Type_ID' on the object which would relate to the ordering of the types_list. As in something like (obviously this isn't valid - but hopefully you will get the idea!)
options_list.OrderBy(x => x.Type_ID == types_list.OrderBy(e => e.Ordering)); 
                Explained: zip the two list s. 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 .
You should be able to use a join to produce your desired output. Example using query syntax.
var orderedOptions = from option in options_list                      join type in types_list                      on option.Type_ID equals type.ID                      orderby type.Ordering                      select option; 
                        List.FindIndex() is your friend when your working with small lists:
var orderedB = listB.OrderBy(b => listA.FindIndex(a => a.id == b.id));  Working example: https://dotnetfiddle.net/CpLeFU
As @goodeye pointed out in the comments, performance will be a nightmare on larger lists. Use the accepted answer in that case.
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