2011-09-19 3 views
0

J'ai donc une collection d'objets employés. J'ai une liste qui contient ces données:Trier la collection par ordre d'un tableau

EmployeeID: 1 
Name: Name1 

EmployeeID: 2 
Name: Name2 

EmployeeID: 3 
Name: Name3 

Je lance un code pour récupérer un ordre de tri de ces employés, et je mets les EmployeeIDs dans un tableau: [2,1,3].

Comment puis-je prendre ma collection d'employés, et les trier par le tableau des EmployeeID?

Répondre

3

Vous récupéreriez les éléments de votre tableau, pas de tri par les éléments du tableau.

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

employees serait alors une liste des objets employés dans l'ordre de votre choix.

0

Je pense que cet utilisateur a posé la même question - vous pouvez joindre les deux ensembles basés sur EmployeeId dans une requête linq.

Custom sorting with LINQ

0

Vous pouvez utiliser Array.indexOf commander la collection en fonction de l'indice d'identification.

Essayez ceci:

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

Le dictionnaire garantit la performance de la recherche des employés sera bon même si vous avez beaucoup d'employés dans votre collection.

Questions connexes