Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System.Linq.IQueryable does not contain a definition for 'Where'

Very odd situation here. For some reason I can't call 'Where', or any other functions, on my IQueryable object.

Here's what I have:

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


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

But Intellisense doesn't pick up the Where function, and I get a Build Error that says:

'System.Linq.IQueryable' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'System.Linq.IQueryable' could be found (are you missing a using directive or an assembly reference?)

But I can call .Where like this and it works:

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

I have no idea what's going on.

like image 445
Steven Avatar asked Sep 20 '11 18:09

Steven


1 Answers

You need to add a using System.Linq; (documentation) statement directive in the file where it isn't working. All of the extension methods for IEnumerable/IQueryable are defined in the Enumerable and Queryable classes, respectively.

In order to use extension methods, the class defining the method must be in scope. My guess is that your second code snippet comes from another file where you do have the using statement.

like image 146
Chris Shain Avatar answered Nov 06 '22 01:11

Chris Shain