我期待成是關係到一個問題... Join and Include in Entity FrameworkLINQ中,爭相模仿連接,以及包括方法
基本上下面的查詢返回「屬性」列表中的對象當前用戶有權限( ACL)來查看。
IQueryable<Property> currPropList
= from p in ve.Property
.Include("phyAddress")
.Include("Contact")
from a in ve.ACLs
from u in ve.Account
from gj in ve.ObjectGroupJoin
where u.username == currUsername // The username
&& (a.Account.id == u.id // The ACLs
&& a.objType == (int)ObjectType.Group)
&& (gj.ObjectGroup.id == a.objId // The groups
&& gj.objId == p.id) // The properties
select p;
查詢返回正確的屬性列表,並在大的工作正常。
但上面的linq查詢中的「包含」調用不會加載對象。如果我在LINQ查詢之後明確地調用「Load()」,那麼這些對象將被加載。
related SO question提示「Include」調用和where子句之間可能存在衝突。這怎麼可能?
但無論如何,我該如何重組這個查詢來加載「phyAddress」和「Contract」成員?具體來說,我只想加載返回的對象的成員,而不是數據庫中的所有「phyAddress」和「Contact」對象。
謝謝。
編輯
我從條款
這工作的問題追查到使用多個的...
IQueryable<Property> currPropList
= from p in ve.Property
.Include("phyAddress")
select p;
與 「phyAddress」 成員是加載。
但是,這並不工作...
IQueryable<Property> currPropList
= from p in ve.Property
.Include("phyAddress")
from a in ve.ACLs
select p;
基本上包括當有多個從條款調用將被忽略。有沒有人知道這個工作?
編輯2
一種解決方法是投的IQueryable結果作爲的ObjectQuery並得到包括過這一點。但我想阻止第二次往返數據庫,我假設這會導致。
例如,這工作....
IQueryable<Property> currPropList
= ((from p in ve.Property
from a in ve.ACLs
select p) as ObjectQuery<Property>).Include("phyAddress");
有沒有辦法做到這一點只有一個單一的查詢?
編輯3
沒有第二個查詢,因爲延遲執行 [http://blogs.msdn.com/charlie/archive/2007/12/09/deferred-execution.aspx。所以編輯2將是解決方案。
它只做一個sql查詢。沒有第二次往返。如果你不確定,你應該看看SQL Server Profiler。 – LukLed 2009-12-12 23:59:03