Pur*_*ome 12 .net entity-framework objectquery entity-framework-4
我有一个DBQuery<T>转换为IQueryable<T>(这一点工作正常).但后来我试图将IQueryable转换为ObjectQuery ..它失败了: -
public void Foo(this IQueryable<T> source)
{
// ... snip ...
ObjectQuery<T> objectQuery = source as ObjectQuery<T>;
if (objectQuery != null)
{
// ... do stuff ...
}
}
Run Code Online (Sandbox Code Playgroud)
在我转换到Entity-Framework 4 CTP5 Magic Unicorn等等之前,这曾经工作过.现在,它不起作用 - 即.objectQuery是null.
现在,DBQuery<T> inherits IQueryable<T>..所以我认为这应该工作.
如果我将代码更改为..
var x = (ObjectQuery<T>) source;
Run Code Online (Sandbox Code Playgroud)
然后抛出以下异常: -
System.InvalidCastException:无法转换类型为'System.Data.Entity.Infrastructure.DbQuery
1[Tests.Models.Order]' to type 'System.Data.Objects.ObjectQuery1 [Tests.Models.Order]'的对象.
有什么建议?
Lad*_*nka 16
DbQuery<T>包含Include方法,因此您无需转换为ObjectQuery.ObjectQuery无法从DbQuery实例访问- 它包含在内部类型中,InternalQuery并且未定义转换运算符.
顺便说一句.当您添加using System.Data.Entity,您将refrence CTP5能叫Include上IQueryable<T>!
Jos*_*uch 11
使用反射,您可以这样做:
var dbQuery = ...;
var internalQueryField = dbQuery.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Equals("_internalQuery"));
var internalQuery = internalQueryField.GetValue(dbQuery);
var objectQueryField = internalQuery.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Equals("_objectQuery"));
// Here's your ObjectQuery!
var objectQuery = objectQueryField.GetValue(internalQuery) as ObjectQuery<T>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12258 次 |
| 最近记录: |