12

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

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>();

其中 db 是从 DbContext 继承的上下文,Request 是类。

因此,当我尝试将期望 ObjectQuery 的方法调用为 ObjectQueryMethod(objectSet) 时,它会引发以下错误。

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

任何帮助是极大的赞赏!

4

2 回答 2

23

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

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;  
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests");

在哪里,

  • db- 上下文类继承自DbContext.
  • Requests-DbSet<Request>在上下文类中定义。
  • objectSet- 现在可以作为ObjectQuery.
于 2012-06-29T13:29:33.550 回答
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'"); 
于 2014-06-18T07:38:22.340 回答