.net - 如何将 DBQuery<T> 转换为 ObjectQuery<T>?

标签 .net entity-framework entity-framework-4 objectquery

我有一个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 ...
    }
}

在我切换到 Entity-Framework 4 CTP5 Magic Unicorn blah blah blah 之前,这曾经有效。现在,它不起作用 - 即。 objectQuerynull .

现在,DBQuery<T> inherits IQueryable<T> ..所以我认为这应该可行。

如果我将代码更改为..

var x = (ObjectQuery<T>) source;

然后抛出以下异常:-

System.InvalidCastException: Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery1[Tests.Models.Order]' to type 'System.Data.Objects.ObjectQuery1[Tests.Models.Order]'.

有什么建议吗?

最佳答案

DbQuery<T>包含Include方法,因此您不需要转换为 ObjectQueryObjectQuery无法从 DbQuery 访问实例 - 它被包装在内部类型 InternalQuery 中并且未定义转换运算符。

顺便说一句。当您添加using System.Data.Entity时并引用CTP5,您可以调用IncludeIQueryable<T> !

关于.net - 如何将 DBQuery<T> 转换为 ObjectQuery<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766122/

相关文章:

c# - 是否可以为我的所有对象创建一个通用的 Repository 类?

.net - 为什么此 getter 抛出 StackOverflowException,但仅在从一个项目调用时才抛出?

.net - Html.RenderAction 是否已进入 VS2010/ASP.NET 4?

.NET 错误 : ldtoken of an instantiated generic method

c# - Linq any - 如何选择

c# - Entity Framework - 如何避免查询重新编译?

.net - .Net 社区项目的 future

c# - 通过反射访问/执行通用方法?

entity-framework - 在 Entity Framework 4 中选择和更新多对多

nhibernate - 在EntityFramework生成的每个查询之前执行一个SQL存储过程