C# 按与C中另一个列表相同的顺序排列列表对象#

C# 按与C中另一个列表相同的顺序排列列表对象#,c#,linq,list,C#,Linq,List,我有一个列表对象,如下所示: var list1 = new List<DummyObject> { new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" }, new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" }, new DummyObject { ID="3", Uniqu

我有一个
列表
对象,如下所示:

  var list1 = new List<DummyObject> {
        new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
        new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
        new DummyObject { ID="3", UniqueCode="Y7twLumNJU6dQZLR0KxqA"     },
        new DummyObject { ID="4", UniqueCode="nG3vejzzxkiO21oDt58vkw"    },
        new DummyObject { ID="5", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg"    },            
    }
    var output= new List<DummyObject> {
        new DummyObject { ID="2", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
        new DummyObject { ID="4", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
        new DummyObject { ID="5", UniqueCode="Y7twLumNJU6dQZLR0KxqA"     },
        new DummyObject { ID="1", UniqueCode="nG3vejzzxkiO21oDt58vkw"    },
        new DummyObject { ID="3", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg"    },            
    }

我想通过
list2
list1
进行排序,结果如下:

  var list1 = new List<DummyObject> {
        new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
        new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
        new DummyObject { ID="3", UniqueCode="Y7twLumNJU6dQZLR0KxqA"     },
        new DummyObject { ID="4", UniqueCode="nG3vejzzxkiO21oDt58vkw"    },
        new DummyObject { ID="5", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg"    },            
    }
    var output= new List<DummyObject> {
        new DummyObject { ID="2", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
        new DummyObject { ID="4", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
        new DummyObject { ID="5", UniqueCode="Y7twLumNJU6dQZLR0KxqA"     },
        new DummyObject { ID="1", UniqueCode="nG3vejzzxkiO21oDt58vkw"    },
        new DummyObject { ID="3", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg"    },            
    }
var输出=新列表{
新的DummyObject{ID=“2”,UniqueCode=“ltrasd8ShFwNEyWrPTd9jIJJQ”},
新的DummyObject{ID=“4”,UniqueCode=“GB456RPCPxRyeor32W5ORMWG”},
新的DummyObject{ID=“5”,UniqueCode=“Y7twLumNJU6dQZLR0KxqA”},
新的DummyObject{ID=“1”,UniqueCode=“nG3vejzzxkiO21oDt58vkw”},
新的DummyObject{ID=“3”,UniqueCode=“aPwwG1JMYUGTvOL2lG0YFg”},
}

谁能在这里指导我如何使用
LINQ

您可以用LINQ这样做:

var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList();
var result = list1.OrderBy(x => list2.IndexOf(Convert.ToInt32(x.ID))).ToList();

如果列表很小,则可以这样做:

var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList();
var result = list1.OrderBy(x => list2.IndexOf(Convert.ToInt32(x.ID))).ToList();
如果列表较大,则以下解决方案的性能会更好:

//Create a dictionary that maps the integer values of the IDs to the objects
var dictionary = list1.ToDictionary(x => Convert.ToInt32(x.ID), x => x);

var result = list2.Select(x => dictionary[x]).ToList();

Join
保留外部序列元素的顺序(
list2
),对于其每个元素,保留内部序列匹配元素的顺序(
list1

试试这个

var _orderedList = (from l2 in list2 join l1 in list1 on l2 equals int.Parse(l1.ID) select l1).ToList();