Entity framework 4 如何将实体框架中的DbSet转换为ObjectQuery
我使用的是CodeFirst方法,遇到了一个需要将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
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()代码>