2012-02-28 144 views
3

我正在使用實體框架4.2(EntityFramework的.dll v4.0.30319)代碼的第一和具有LINQ查詢可被簡化爲:無法強制類型爲'System.Linq.EnumerableQuery`1 [Entities.Test]'的對象輸入'System.Data.Objects.ObjectQuery`1 [Entities.Test]'

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

repository.TestsIQueryable<Test>直接在Enity框架的DbContext實現爲DbSet<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]「。

爲什麼會發生這種情況?

+0

萬一有人用Google搜索這樣的:因爲這是在嘲笑數據(數組,而不是DB)單元測試執行的查詢擔任區分大小寫。 ;-) – Pol 2012-02-28 17:29:38

回答

3

您正在合併兩個不同的API - ObjectContext API和DbContext API。您不能將從DbSet創建的查詢投射到ObjectQuery,而只能投射到與ObjectQuery無關的DbQuery

你想要做什麼可以很容易地achived:

var trace = testQuery.ToString(); 
相關問題