2012-08-09 41 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。