所以我有一個Employee對象的集合。我有一個包含此數據的列表:按數組順序排序集合
EmployeeID: 1
Name: Name1
EmployeeID: 2
Name: Name2
EmployeeID: 3
Name: Name3
我跑了一些代碼來取回這些員工的排序順序,我把EmployeeIDs一個數組:[2,1,3]
。
如何獲得我的員工集合,並按員工數組排序?
所以我有一個Employee對象的集合。我有一個包含此數據的列表:按數組順序排序集合
EmployeeID: 1
Name: Name1
EmployeeID: 2
Name: Name2
EmployeeID: 3
Name: Name3
我跑了一些代碼來取回這些員工的排序順序,我把EmployeeIDs一個數組:[2,1,3]
。
如何獲得我的員工集合,並按員工數組排序?
您將爲數組獲取元素,而不是按數組項排序。
var employees = myArray.Select(item => myEmployeeCollection.First(x => x.EmployeeId == item).ToList();
employees
然後將按您的數組順序列出員工對象列表。
我想這個用戶提出了同樣的問題 - 你可以在linq查詢中加入兩個基於EmployeeId的集合。
您可以使用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));
var employees = ...
var employeesByID = employees.ToDictionary(employee => employee.ID);
var sortedIDs = new int[] {2, 1, 3};
var sortedEmployees = sortedIDs.Select(ID => employeesByID[ID]);
詞典保證了員工查詢的性能會好,即使你在集合中有多少員工。