Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/cplusplus11/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 如何将实体框架中的DbSet转换为ObjectQuery_Entity Framework 4_Linq To Entities_Ef Code First_Dbcontext - Fatal编程技术网

Entity framework 4 如何将实体框架中的DbSet转换为ObjectQuery

Entity framework 4 如何将实体框架中的DbSet转换为ObjectQuery,entity-framework-4,linq-to-entities,ef-code-first,dbcontext,Entity Framework 4,Linq To Entities,Ef Code First,Dbcontext,我使用的是CodeFirst方法,遇到了一个需要将DbSet转换为ObjectQuery的问题。 这就是我所做的转化 ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>(); ObjectContext ObjectContext=((IO

我使用的是CodeFirst方法,遇到了一个需要将DbSet转换为ObjectQuery的问题。 这就是我所做的转化

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>();
ObjectContext ObjectContext=((IOObjectContextAdapter)db).ObjectContext;
ObjectSet ObjectSet=objectContext.CreateObjectSet();
其中,db是从DbContext继承的上下文,Request是class

因此,当我尝试调用期望ObjectQuery作为ObjectQueryMethod(objectSet)的方法时,它抛出以下错误

“无法确定条件表达式的类型,因为'System.Data.Entity.DbSet'和'System.Data.Objects.ObjectQuery'之间没有隐式转换”


非常感谢您的帮助

我找到了答案。当然,可以使用下面几行代码将实体框架中的DbSet转换为ObjectQuery

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;  
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests");
ObjectContext ObjectContext=((IOObjectContextAdapter)db).ObjectContext;
ObjectSet ObjectSet=objectContext.CreateObjectSet(“请求”);
在哪里,

  • db
    -从
    DbContext
    导入的上下文类
  • 请求
    -
    DbSet
    在上下文类中定义
  • objectSet
    -现在可以作为
    ObjectQuery
    传递

    • 感谢您给出了正确的答案“激励自己”;这只是为了详细说明你的答案。我成功地使用泛型类型实现了这一点,因此只需共享它:

      private List<T> GetByCustomCriteria<T>(string criteria) where T: class
      {
        var objectContext = ((IObjectContextAdapter)_myModelEntities).ObjectContext;
        //note: _myModelEntities is a DbContext in EF6.
        var objectSet = objectContext.CreateObjectSet<T>();
        return new List<T>(objectSet.Where(criteria));
       }
      
      private List GetByCustomCriteria(字符串标准),其中T:class
      {
      var objectContext=((IObjectContextAdapter)_myModelEntities).objectContext;
      //注意:_myModelEntities是EF6中的DbContext。
      var objectSet=objectContext.CreateObjectSet();
      返回新列表(objectSet.Where(criteria));
      }
      
      我认为上面的帖子可以作为发送标准的一个例子,所以这里有一个例子:

       //sample criteria for int field:
       var myClientById = GetByCustomCriteria<Client>("it.Id == 1");`
      
      //sample criteria for string field, note the single quotes
      var myClientByName = GetByCustomCriteria<Client>("it.Surname == 'Simpson'"); 
      
      //int字段的示例条件:
      var myClientById=GetByCustomCriteria(“it.Id==1”)`
      //字符串字段的示例条件,请注意单引号
      var myClientByName=GetByCustomCriteria(“it.姓氏=='Simpson'”);
      
      为什么需要将数据库集转换为ObjectQuery?提供更多详细信息-什么是
      ObjectQueryMethod
      ?你目前的做法是正确的。无法将
      DbSet
      转换为
      ObjectQuery
      。您必须创建
      ObjectSet
      并使用它,而不是
      DbSet
      @Kittoes:我正试图在JQGrid中实现高级搜索,ObjectQuery似乎是解析发送回服务器的参数(过滤器)的正确方法。@LadislavMrnka:它只是一个期望ObjectQuery作为参数的方法(以此命名))谢谢大家抽出时间。我发现我缺少了什么,我需要将DbSet(“请求”)作为ObjectSet ObjectSet=objectContext.CreateObjectSet(“请求”)传递给ObjectSet;好的,您可以将字符串保留为参数,这样可以减少错误提示:
      objectContext.CreateObjectSet()