2011-09-19 170 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]); 

词典保证了员工查询的性能会好,即使你在集合中有多少员工。