2011-09-19 18 views
0

私はEmployeeオブジェクトのコレクションを持っています。私は、このデータを含むリストを持っている:配列の順番でコレクションを並べ替える

EmployeeID: 1 
Name: Name1 

EmployeeID: 2 
Name: Name2 

EmployeeID: 3 
Name: Name3 

私はこれらの従業員のソート順を取り戻すためにいくつかのコードを実行し、私は配列にEmployeeIDsを置く:[2,1,3]

どのように私の従業員のコレクションを取って、EmployeeIDの配列で並べ替えることができますか?

答えて

3

あなたは配列の要素をフェッチし、配列の項目は並べ替えません。

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

employeesあなたの配列の従業員オブジェクトのリストになります。

0

私はこのユーザーが同じ質問をしたと思います。linqクエリでEmployeeIdに基づいて2つのセットを結合することができます。

Custom sorting with LINQ

0

あなたはIDのインデックスに基づいて、コレクションを注文するArray.IndexOfを使用することができます。

これを試してみてください:

 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]); 

辞書には、従業員の検索のパフォーマンスは、あなたのコレクションに多くの従業員を持っていても良いだろう保証します。

関連する問題