如何将Entity框架中的DbSet转换为ObjectQuery

时间:2012-06-28 20:08:32

标签: entity-framework-4 linq-to-entities ef-code-first dbcontext

我正在使用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;'“

非常感谢任何帮助!

2 个答案:

答案 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'");