編集: とにかくタグがそれを示唆している可能性があるにもかかわらず、私は 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;
}
すべての子が適切に設定された OuterLevel オブジェクトのリストを返す Linq クエリを作成する必要があります。すべてのマッピングが正しく機能していると仮定すると、ここで見つけた難しい部分は、結果のクエリが次のようになることです。
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)
主な問題は、2 つの結合が MidLevel オブジェクトから階層の下方に開始されることです。そのため、次のように、結果のクエリが MidLevelTable の 2 回結合することなく、どの Fetch と FetchMany の組み合わせを使用できるかを判断できません。
return All().FetchMany(x => x.mid_items).ThenFetch(x => x.inner1).FetchMany(x => x.mid_items).ThenFetch(x => x.inner2);
さらにフィルタリングできる IQueryable を返したいので、Query と QueryOver は避けたいと思います。
前もってありがとう、マリオ