按数组顺序对集合进行排序

时间:2011-09-19 18:19:45

标签: c# asp.net linq

所以我有一组Employee对象。我有一个包含这些数据的列表:

EmployeeID: 1
Name: Name1

EmployeeID: 2
Name: Name2

EmployeeID: 3
Name: Name3

我运行一些代码来获取这些员工的排序顺序,并将EmployeeID放在一个数组中:[2,1,3]

如何获取Employees的集合,并按EmployeeID数组对它们进行排序?

4 个答案:

答案 0 :(得分:3)

您将获取数组的元素,而不是按数组项排序。

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

employees将按照数组的顺序列出员工对象。

答案 1 :(得分:0)

我认为这个用户提出了同样的问题 - 你可以在linq查询中加入基于EmployeeId的两个集合。

Custom sorting with LINQ

答案 2 :(得分: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));

答案 3 :(得分:0)

var employees = ...
var employeesByID = employees.ToDictionary(employee => employee.ID);

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

即使您的收藏中有许多员工,该词典也可确保员工查询的表现良好。