2016-05-16 57 views
-3

我有一个List对象如下:在相同的顺序,在C#中的另一个列表顺序列出对象

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 }; 


我想请通过list2订购list1,结果应如下所示:

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

回答

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(); 
0

你可以用LINQ做到这一点是这样的:

var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList(); 
0

Join保留元素的顺序o ˚F外序列(list2),以及用于它的每个元素,内序列的匹配元素的顺序的(list1

var output = list2.Join(list1, i => i.ToString(), o => o.ID, (i,o) => o) 
        .ToList(); 
0

尝试这种

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