Try this:
var result = listA
.Select((x, i) => new {Index = i, Value = x})
.Join(listB.Select((x, i) => new {Index = i, Value = x}),
la => la.Index,
lb => lb.Index,
(la, lb) => new {A = la, B = lb})
.OrderBy(x => x.B.Value)
.Select(x => new {LA = x.A.Value, LB = x.B.Value})
.ToList();
Here is an implementation of what
Daniel Pfeffer[
^] mentioned:
Dictionary<int, int> indexer = listB
.Select((x, i) => new KeyValuePair<int, int>(i, x))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
var result2 = listA
.OrderBy(x => indexer[listA.IndexOf(x)])
.ToList();