MVC3 ajaxgrid scaffolding error, Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Data.Objects.ObjectQuery'

1k Views Asked by At

I'm using MVC3 ajaxgrid scaffolding with EF4.1 code first and i've this error:

Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Data.Objects.ObjectQuery'

The code with the error in, is autogenerated:

public ActionResult GridData(int start = 0, int itemsPerPage = 20, string orderBy = "UserID", bool desc = false)
        {
            Response.AppendHeader("X-Total-Row-Count", repository.Users.Count().ToString());
            ObjectQuery<User> users = (repository as IObjectContextAdapter).ObjectContext.CreateObjectSet<User>();

            users = repository.Users.Include(u => u.Role); //ERROR HERE

            users = users.OrderBy("it." + orderBy + (desc ? " desc" : ""));    
            return PartialView(users.Skip(start).Take(itemsPerPage));
        }

This is the Users repository method and the Roles Foreign Key

  public IQueryable<Entities.User> Users
        {
            get { return context.Users; }
        }


  public IQueryable<Entities.Role>Roles
        {
            get { return context.Roles; }
        }

How can i resolve the conversion?

2

There are 2 best solutions below

3
On

The reason is clear:

You have users variable with ObjectQuery<User> type then you assign that variable result of a query which is IQueryable<User>.

UPDATE: Try the code below:

public ActionResult GridData(int start = 0, int itemsPerPage = 20, string orderBy = "UserID", bool desc = false)
{
   Response.AppendHeader("X-Total-Row-Count", repository.Users.Count().ToString());
   //ObjectQuery<User> users = (repository as IObjectContextAdapter).ObjectContext.CreateObjectSet<User>();

   var users = repository.Users.Include(u => u.Role); //ERROR HERE

   users = users.OrderBy("it." + orderBy + (desc ? " desc" : ""));    
   return PartialView(users.Skip(start).Take(itemsPerPage));
}
0
On

Get rid of the Lambda and use the related object:

var users = repository.Users.Include("Role");  //ERROR HERE

Assuming the entity User has a navigational property Role.