0

最初にEF4.1コードでMVC3 ajaxgrid scaffoldingを使用していますが、次のエラーが発生しました:

タイプ '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 に答える