编辑:忘了说我正在使用 Fluent NHibernate,尽管标签可能会暗示它。
我有这些实体类:
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)
主要问题是两个连接从层次结构向下的 MidLevel 对象开始,所以我无法确定可以使用哪个 Fetch 和 FetchMany 组合,而不需要将结果查询连接两倍于 MidLevelTable,如下所示:
return All().FetchMany(x => x.mid_items).ThenFetch(x => x.inner1).FetchMany(x => x.mid_items).ThenFetch(x => x.inner2);
我想返回一个可以进一步过滤的 IQueryable,所以我宁愿避免使用 Query 和 QueryOver。
在此先感谢,马里奥