web-dev-qa-db-fra.com

System.Linq.IQueryable ne contient pas de définition pour «Où»

Situation très étrange ici. Pour une raison quelconque, je ne peux pas appeler "Où", ni aucune autre fonction, sur mon objet IQueryable.

Voici ce que j'ai:

public IQueryable<Employee> Employees
{
    get { return _entities.Employees.AsQueryable(); }
}


public ActionResult Index()
{
    return View(new HomeViewModel
        {
            Employees = Employees.Where(e => e.Active == true)
        });
}

Mais Intellisense ne récupère pas la fonction Where, et j'obtiens une erreur de génération qui dit:

'System.Linq.IQueryable' ne contient pas de définition pour 'Where' et aucune méthode d'extension 'Where' acceptant un premier argument de type 'System.Linq.IQueryable' a pu être trouvée (il vous manque une directive using ou une référence d'assembly ?)

Mais je peux appeler .Where comme ça et ça marche:

public IQueryable<Employee> Employees
{
    get { return _entities.Employees.AsQueryable().Where(e => e.Active == true); }
}

Je ne ai aucune idée de ce qui se passe.

36
Steven

Vous devez ajouter un "using System.Linq ;" déclaration dans le fichier où il ne fonctionne pas. Toutes les méthodes d'extension pour IEnumerable/IQueryable sont définies dans les classes Enumerable et Queryable , respectivement.

Pour utiliser des méthodes d'extension, la classe définissant la méthode doit être dans la portée. Je suppose que votre deuxième extrait de code provient d'un autre fichier où vous avez l'instruction using.

58
Chris Shain