无法将类型为'System.Linq.EnumerableQuery`1 [Entities.Test]'的对象强制转换为'System.Data.Objects.ObjectQuery`1 [Entities.Test]'

时间:2012-02-28 09:45:13

标签: c# .net entity-framework linq-to-entities ef-code-first

我正在使用Entity Framework 4.2(EntityFramework.dll v4.0.30319)Code First并且有一个LINQ查询,可以简化为:

IQueryable<Test> testQuery = from test in repository.Tests select test;

repository.Tests IQueryable<Test>已直接在{1}}中DbSet<Test>实施为DbContext

我注意到我的查询在某种程度上区分大小写,并且在Microsoft SQL Server数据库中使用不区分大小写的排序规则。可疑,所以我想跟踪SQL。但是当我这样做时:

var trace = ((ObjectQuery<Test>)testQuery).ToTraceString();

我得到例外:

  

无法转换类型为'System.Linq.EnumerableQuery 1[Entities.Test]' to type 'System.Data.Objects.ObjectQuery 1 [Entities.Test]'的对象。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

您正在组合两个不同的API - ObjectContext API和DbContext API。您无法将从DbSet创建的查询转换为ObjectQuery,但仅限于DbQueryObjectQuery无关的查询。

您可以轻松实现您想要做的事情:

var trace = testQuery.ToString();