Ошибка скаффолдинга ajaxgrid в MVC3, невозможно неявное преобразование типа «System.Linq.IQueryable» в «System.Data.Objects.ObjectQuery» - PullRequest
0 голосов
/ 14 января 2012

Сначала я использую ajaxgrid-леса MVC3 с кодом EF4.1, и у меня появляется эта ошибка:

Невозможно неявно преобразовать тип '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));
        }

Это метод репозитория Users и внешний ключ Roles

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


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

Как мне разрешить преобразование?

Ответы [ 2 ]

1 голос
/ 07 мая 2012

Избавьтесь от лямбды и используйте связанный объект:

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

Предполагая, что у пользователя есть навигационное свойство Role.

0 голосов
/ 14 января 2012

Причина ясна:

У вас есть переменная users с типом ObjectQuery<User>, и вы присваиваете этой переменной результат запроса, равный IQueryable<User>.

UPDATE: Попробуйте код ниже:

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