【问题标题】:IQueryable Linq query with multiple joins at inner level在内部级别具有多个连接的 IQueryable Linq 查询
【发布时间】:2012-08-09 16:28:32
【问题描述】:

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

提前致谢, 马里奥

【问题讨论】:

  • 您想要IQueryable 但更愿意避免使用Query?这不是Query 的用途吗?

标签: c# .net linq fluent-nhibernate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多