2016-05-16 60 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(); 
相關問題