我正在使用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]'的对象。
为什么会这样?
答案 0 :(得分:4)
您正在组合两个不同的API - ObjectContext API和DbContext API。您无法将从DbSet
创建的查询转换为ObjectQuery
,但仅限于DbQuery
与ObjectQuery
无关的查询。
您可以轻松实现您想要做的事情:
var trace = testQuery.ToString();