2012-08-29 4 views
2

J'ai une collection List<Employees> que j'essaie de sélectionner Active employés sur.Linq Query OrderBy multiple

Je dois faire quelque chose de mal, parce que je vois de nombreux exemples de montrer ici que je peux le faire, mais Visual Studio me dit que je ne peux pas parce que:

ne peut pas convertir implicitement le type « System.Linq .IOrderedEnumerable 'to' System.Collections.Generic.List '. Une conversion explicite existe (vous manque un casting?)

Quel est le problème avec cette image? (LastName et FirstName (comme vous pouvez le suspecter) sont les deux valeurs de chaîne, et Active est un booléen.

range variable

DataGridView1.DataSource = null; 
List<AcpEmployee> emps = from e in employeeInfo.Employees 
         where e.Active 
         orderby e.LastName, e.FirstName descending 
         select e; 
+0

duplication possible de [OrderBy et List vs. IOrderedEnumerable] (http://stackoverflow.com/questions/9285426/orderby-and-list-vs-iorderedenumerable) – nawfal

Répondre

4

Juste ajouter un ToList() à votre requête si vous voulez que le résultat sous la forme d'une liste. ou simplement déclarer emps que var emps qui auront un type IOrderedEnumerable

9

Vous devez utiliser ToList à la fin de votre requête:

List<AcpEmployee> emps = ( from e in employeeInfo.Employees 
          where e.Active 
          orderby e.Active orderby e.LastName, e.FirstName descending 
          select e).ToList(); 

ou en utilisant les méthodes directement:

List<AcpEmployee> emps = employeeInfo.Employees 
    .Where(e => e.Active) 
    .OrderBy(e => e.LastName) 
    .ThenByDescending(e => e.FirstName) 
    .ToList(); 
1

Cela a été answered here before, il suffit d'utiliser le mot-clé orderby dans linq

var emps = from e in employeeInfo.Employees 
      where e.Active orderby e.LastName thenby e.FirstName select e; 
+1

'orderby' ou' thenby'? Il donne toujours l'erreur parce que mon code essaye spécifiquement de l'assigner à 'List '. – jp2code

+1

Ahh, j'ai raté cette tâche, L.B a raison, il suffit d'ajouter le .ToList() – lucusc