2012-08-09 63 views
0

編輯:忘了說我正在使用流利的NHibernate,即使標籤可以暗示它。IQueryable在內層有多個連接的Linq查詢

我這些實體類:

class OuterLevel 
{ 
    ICollection<MidLevel> mid_items; 

    ... other properties 
} 

class MidLevel 
{ 
    OuterLevel parent; 
    Inner1 inner1; 
    Inner2 inner2; 

    ... other properties 
} 

class Inner1 
{ 
    int id; 
    string description; 
} 

class Inner2 
{ 
    int id; 
    string description; 
} 

我需要建立一個LINQ查詢,返回OuterLevel的列表,適當填充所有子對象。 假設所有映射是正確的,工作時,我發現這裏的難點在於結果查詢應該是這樣的

SELECT * FROM OuterLevelTable OLT INNER JOIN MidLevelTable MLT ON (MLT.parentID = OLT.ID) INNER JOIN 
    Inner1Table ON (MLT.Inner1ID = Inner1Table.ID) INNER JOIN 
    Inner2Table ON (MLT.Inner2ID = Inner2Table.ID) 
WHERE (Inner1Table.someproperty1 = somevalue1) AND (Inner2Table.someproperty2 = somevalue2) 

的主要問題是兩個聯接從中層開始向下對象層次,所以我不能找出哪些抓取並支持fetchmany組合可以在不具有生成的查詢加入兩倍MidLevelTable,可以使用諸如以下的作用:

return All().FetchMany(x => x.mid_items).ThenFetch(x => x.inner1).FetchMany(x => x.mid_items).ThenFetch(x => x.inner2); 

我想返回可被進一步過濾一個IQueryable的,所以我寧願避免查詢和QueryOver。因爲當你在連接表的結果記錄是不夠反正填充集合過濾

由於提前, 馬里奧

+0

你想'IQueryable',但寧願避免'查詢'?這不就是'Query'的用途嗎? – 2012-08-10 08:54:22

回答

0

你想要什麼是不可能的。您最好在一個地方構建查詢以進一步調整查詢或將集合批量大小設置爲SELECT N + 1。