我有兩個類似的查詢返回理論上相同的結果:意外LINQ的行爲 - ToList()
var requestNotWorking = SessionManagement.Db.Linq<Item>(false).Where(i =>
i.Group != null && i.Group.Id == methodParameter)
.ToList();
此請求返回0的項目,即使它應該返回一個。 以下是對後者的重寫,但是調用了ToList()
方法。此請求有效並返回第一個查詢中預期的項目!
var requestWorking = SessionManagement.Db.Linq<Item>(false).ToList().Where(i =>
i.Group != null && i.Group.Id == methodParameter).ToList();
注:SessionManagement.Db.Linq<Item>(false)
是一個通用的LINQ到NHibernate的方法與所述布爾屬性確定該請求必須在高速緩存中(真)或數據庫(假)來執行。這種方法應該沒有錯,因爲它在解決方案的許多其他部分中正常工作。項目的映射是沒有什麼奇特的:沒有袋子和以下參數: lazy="false" schema="dbo" mutable="false" polymorphism="explicit"
這是爲什麼呢?
編輯:
(Item.Group_ID is not null) and [email protected]',N'@p0 int',@p0=11768
requestWorking的生成的SQL請求是大致一個select * from dbo.Items
如果您使用的是Sql Server,您是否曾嘗試在運行這兩個查詢的同時運行SQL Profiler? – nerdybeardo
i.Group在兩者之間有所不同。具有相同的名稱,但在不同類型的館藏中完全不同。 –
請發佈生成的SQL。 SQL與C#語義規定的內容之間存在語義差異。 LINQ不承諾相同的語義。 – usr