2011-09-19 176 views
0

所以我有一個Employee對象的集合。我有一個包含此數據的列表:按數組順序排序集合

EmployeeID: 1 
Name: Name1 

EmployeeID: 2 
Name: Name2 

EmployeeID: 3 
Name: Name3 

我跑了一些代碼來取回這些員工的排序順序,我把EmployeeIDs一個數組:[2,1,3]

如何獲得我的員工集合,並按員工數組排序?

回答

3

您將爲數組獲取元素,而不是按數組項排序。

var employees = myArray.Select(item => myEmployeeCollection.First(x => x.EmployeeId == item).ToList(); 

employees然後將按您的數組順序列出員工對象列表。

0

我想這個用戶提出了同樣的問題 - 你可以在linq查詢中加入兩個基於EmployeeId的集合。

Custom sorting with LINQ

0

您可以使用Array.IndexOf訂購基於ID的索引集合。

試試這個:

 var employees = new List<Employee>(); 
     employees.Add(new Employee{ID = 3, Name="Name1"}); 
     employees.Add(new Employee{ID = 1, Name="Name2"}); 
     employees.Add(new Employee{ID = 2, Name="Name3"}); 

     var orders = new long[]{2, 1, 3}; 

     var orderedEmployees = employees.OrderBy(e => Array.IndexOf(orders, e.ID)); 
     orderedEmployees.ToList().ForEach(e => Console.WriteLine(e.ID)); 
0
var employees = ... 
var employeesByID = employees.ToDictionary(employee => employee.ID); 

var sortedIDs = new int[] {2, 1, 3}; 
var sortedEmployees = sortedIDs.Select(ID => employeesByID[ID]); 

詞典保證了員工查詢的性能會好,即使你在集合中有多少員工。