我有一个List
对象如下:
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" },
}
和Ids的另一个List
对象定义是:
List<int> list2 = new List<int>() { 2, 4, 5, 1, 3 };
我想按list1
订购list2
,结果应如下:
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" },
}
有人可以在这里指导我如何使用LINQ
?
答案 0 :(得分:3)
如果列表很小,那么你可以这样做:
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();
答案 1 :(得分:0)
您可以使用LINQ执行此操作:
var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList();
答案 2 :(得分:0)
Join
保留外部序列(list2
)元素的顺序,并且对于每个元素,内部序列(list1
)的匹配元素的顺序
var output = list2.Join(list1, i => i.ToString(), o => o.ID, (i,o) => o)
.ToList();
答案 3 :(得分:0)
试试这个
var _orderedList = (from l2 in list2 join l1 in list1 on l2 equals int.Parse(l1.ID) select l1).ToList();