我正在使用CodeFirst方法并遇到了一个需要将DbSet转换为ObjectQuery的问题。 这就是我为转换所做的。
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>();
其中db是从DbContext继承的上下文,Request是class。
因此,当我尝试调用期望ObjectQuery为ObjectQueryMethod(objectSet)的方法时,它会抛出以下错误。
“无法确定条件表达式的类型,因为'System.Data.Entity.DbSet&lt;&gt;'之间没有隐式转换和'System.Data.Objects.ObjectQuery&lt;&gt;'“
非常感谢任何帮助!
答案 0 :(得分:23)
我找到了答案。当然,可以使用下面的代码行将Entity框架中的DbSet转换为ObjectQuery。
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests");
其中,
db
- 来自DbContext
的上下文类。 Requests
- DbSet<Request>
在Context类中定义。 objectSet
- 现在可以ObjectQuery
传递。答案 1 :(得分:2)
感谢正确答案'鼓舞自己';这只是为了详细说明你的答案。我设法使用泛型类型,所以只是分享它:
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));
}
我认为上面的帖子可以用一个例子来说明要发送的标准,所以这里有一个例子:
//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'");