私はこれらのエンティティを持っています: ClassB1 と ClassB2 は 2 つの別個のエンティティです。別々のテーブルがありますが、フィールドは同じです。
どちらも、別のテーブルを持つ ClassC への参照を持っています。
ClassA
-> ClassB1
-> Property1
-> ClassC
-> Property2
-> ClassB2
-> Property1
-> ClassC
-> Property2
これまでのところ、Property1 と Property2 を照会する必要があります。
ClassB1 classB1Alias = null;
ClassB2 classB2Alias = null;
ClassC classCAlias = null;
var query = s.QueryOver<ClassA>();
if (!string.IsNullOrWhiteSpace(searchFilter.Property1))
{
query.JoinAlias(d => d.ClassB1, () => classB1Alias );
query.WhereRestrictionOn(() => classB1Alias.Property1)
.IsLike("%" + searchFilter.Property1 + "%");
query.JoinAlias(p => p.ClassB2, () => classB2Alias);
query.WhereRestrictionOn(() => classB2Alias.Property1)
.IsLike("%" + searchFilter.Property1+ "%");
}
if (!string.IsNullOrWhiteSpace(searchFilter.Property2))
{
query.JoinAlias(d => d.ClassB1.ClassC, () => classCAlias);
query.JoinAlias(d => d.ClassB2.ClassC, () => classCAlias);
query.WhereRestrictionOn(() => classCAlias.Property2)
.IsLike("%" + searchFilter.Property2+ "%");
}
// select only Property1 and Property2 here
return query.List();
プロジェクションを見たことがありますが、サンプルは基準オブジェクトに接続されています。私はnhibernateが初めてで、午後中ずっとコーディングして正しいクエリを取得しています。
Select all ClassB1 and ClassB2 which have a Property1 equal to x where ClassB1.ClassC.Property2 and ClassB2.ClassC.Property2 equal to y
ここでちょっと助けが必要です。ありがとう
ps。Property2 のクエリは正しいですか?