0

我首先使用带有 EF4.1 代码的 MVC3 ajaxgrid 脚手架,我有这个错误:

无法将类型“System.Linq.IQueryable”隐式转换为“System.Data.Objects.ObjectQuery”

带有错误的代码是自动生成的:

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));
        }

这是用户存储库方法和角色外键

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


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

我该如何解决转换?

4

2 回答 2

1

摆脱 Lambda 并使用相关对象:

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

假设实体 User 具有导航属性 Role。

于 2012-05-07T02:22:49.937 回答
0

原因很明确:

你有users变量ObjectQuery<User>类型,然后你分配一个查询的变量结果是IQueryable<User>.

更新: 试试下面的代码:

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));
}
于 2012-01-14T08:18:43.180 回答