0

编辑:忘了说我正在使用 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。

在此先感谢,马里奥

4

1 回答 1

0

你想要什么是不可能的,因为当你过滤连接的表时,结果记录无论如何都不足以填充集合。您最好在一个地方构建查询以进一步调整它或设置集合批量大小以降低 SELECT N+1。

于 2012-08-14T06:11:34.397 回答