2009-05-24 14 views
2

i besoin valeur Enumarable de classe ci-dessous, mais donnent une erreurRetour Valeur enumerative de Class in linq?


    public static Enumerable LoadDataByName(string name) 
     { 
      List<StuffDepartman> Stuff = (List<StuffDepartman>)HttpContext.Current.Session["Stuffs"]; 
      var stuffs = from s in Stuff select s; 

      stuffs = from s in Stuff where s.Name = name select s.Name; 

      return stuffs.AsEnumerable(); 
     } 

Mais Donne-moi une erreur: System.Linq.Enumerable ': types statiques ne peuvent pas être utilisés comme types de retour

Répondre

2

Dans .NET 3.5, il existe un Enumerable statique existant dans System.Linq, qui contient des méthodes d'extension pour manipuler IEnumerable s - ce n'est pas ce que vous voulez (ou bien peut) retour. Changez-le en IEnumerable, qui est la classe non générique enumerable (et ce que je pense que vous avez l'intention de faire), et tout devrait fonctionner correctement.

Mieux encore, utilisez la version générique de IEnumerable, en tant que tel:

public static IEnumerable<StuffDepartman> LoadDataByName(string name) 
{ 
    var stuffs = (List<StuffDepartman>)HttpContext.Current.Session["Stuffs"]; 

    return (from s in stuffs where s.Name == name select s.Name); 
} 

Notez également que vous n'avez pas besoin de l'appel à AsEnumerable avant de revenir, car List<T> implémente IEnumerable<T>, et l'ancien peut être implicitement casté à ce dernier. Le = devait être changé en ==, puisque vous voulez utiliser l'opérateur d'égalité plutôt que d'affectation ici. Les autres changements sont juste en ordre.

+0

vos codes me donnent l'erreur: Le type non générique 'System.Linq.Enumerable' ne peut pas être utilisé avec des arguments de type – Penguen

+0

vous ne pouvez pas faire cela "Enumerable " – Penguen

+0

Oops. Désolé, manqué le 'je' - il devrait être IEnumerable. – Noldorin

1

System.Linq.Enumerable est une classe statique avec un tas de méthodes d'extension définies dessus. Vous vouliez peut-être retourner IEnumerable<string> à la place.

0

Enumerable est une classe statique, ce que vous voulez faire est de retourner un IEnumerable:

public static IEnumerable<string> LoadDataByName(string name) 
    { 
     //do stuff 
    } 

Je suppose s.Name dans votre exemple est une chaîne, qui est la raison pour laquelle la méthode doit retourner IEnumerable < chaîne >. Si c'est un autre type, alors changez-le à ce type ....

EDIT: Ok, je suppose que ce n'est pas une chaîne. Changer à:

public static IEnumerable<StuffDepartman> LoadDataByName(string name) 
    { 
     //do stuff 
    } 
+0

si j'ajouter vos codes, changement d'erreur .... – Penguen

+0

Error1: ne peut pas convertir implicitement 'string' de type à 'bool' – Penguen

+0

Error2: ne peut pas convertir implicitement le type 'System.Collections.Generic.IEnumerable ' à 'System.Collections.Generic.IEnumerable '. Une conversion explicite existe (vous manque un casting?) – Penguen

Questions connexes