无法强制转换类型为';的对象;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]"的对象。

为什么会发生这种情况?

无法强制转换类型为';的对象;System.Linq.EnumerableQuery`1[Entities.Tes

您正在组合两个不同的API-ObjectContext API和DbContext API。不能将从DbSet创建的查询强制转换为ObjectQuery,而只能强制转换为与ObjectQuery无关的DbQuery

你想做什么可以很容易地实现:

var trace = testQuery.ToString();