无法强制转换类型为';的对象;System.Linq.EnumerableQuery`1[Entities.Tes
本文关键字:EnumerableQuery Linq System Tes Entities 对象 转换 类型 | 更新日期: 2023-09-27 18:26:04
我使用的是Entity Framework 4.2(EntityFramework.dll v4.0.30119)Code First,并有一个LINQ查询,可以简化为:
IQueryable<Test> testQuery = from test in repository.Tests select test;
repository.Tests
是在Enity Framework的DbContext
中直接实现为DbSet<Test>
的IQueryable<Test>
。
我注意到我的查询在某种程度上是区分大小写的,在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]"的对象。
为什么会发生这种情况?
您正在组合两个不同的API-ObjectContext API和DbContext API。不能将从DbSet
创建的查询强制转换为ObjectQuery
,而只能强制转换为与ObjectQuery
无关的DbQuery
。
你想做什么可以很容易地实现:
var trace = testQuery.ToString();