2011-07-03 4 views
0

2つのサブクエリをWithSubQueryでクエリオーバーと組み合わせるにはどうすればよいですか?私は、私は2つのメソッドを比較することができますWithSubqueryのいずれかの方法を見ることができない2つのサブクエリを比較するNHibernateクエリ

query.WithSubquery.WhereValue(QueryOver.Of<Child>() 
            .Where(m => m.Parent.Id == paretAlias.Id) 
            .Select(Projections.Max("SomeProp"))) 
            .Lt(QueryOver.Of<Child>(() => childAlias) 
            .Where(m => childAlias.Id == parentAlias.Id) 
            .Select(Projections.Max("SomeOtherProp"))); 

:私は以下のようなものを(正確な構文は関係ありません)します。ラムダ

WherePropertyを取ります:それはどこ

たサブクエリ

WhereValueと比較してプロパティを取ります。サブクエリ

WhereExistsと比較した値を取ります。クエリをとります。

基本的に私はそれを持つメソッドは、SQLのサンプル出力クエリは次のようになり、サブクエリを受け取り、別のサブクエリで

を比較したい:

select * from Parent inner join child on parent.id = child.parentid where 
    (select max(SomeProp) from child where child.parentid = parent.id) > (select max(SomeOtherProp) from child where child.parentid = parent.id) 
+0

生成されたSQLをどのように見せたいかの例を教えてください。 –

答えて

1

私はあなたを解決することができるはずだと思います少しsql-queryを変更することによって問題:

SELECT p.* FROM [Parent] as p 
WHERE EXISTS 
(
    SELECT c.[parentId] as parentid FROM [Child] as c 
    WHERE c.[parentid] = p.[id] 
    GROUP BY c.[parentid] 
    HAVING MAX(c.[someProp]) < MAX(c.[someOtherProp]) 
) 

これが正しい結果セットを返す場合、あなたはとそれを実装することができますそのよう:

Selecting on Sub Queries in NHibernate with Critieria API

私は、このことができます歓声を願っています:私はすでに同様の質問に答えました

Parent p = null; 
Child c = null; 

var subquery = QueryOver.Of(() => c) 
    .SelectList(list => list.SelectGroup(() => c.ParentId)) 
    .Where(Restrictions.LtProperty(
     Projections.Max(() => c.SomeProp), 
     Projections.Max(() => c.SomeOtherProp))) 
    .And(Restrictions.EqProperty(
     Projections.Property(() => c.ParentId), 
     Projections.Property(() => p.Id))); 

var query = QueryOver.Of(() => p) 
    .WithSubquery.WhereExists(subquery); 

IList<Parent> resutl = Session.CreateQuery(query); 

、上記のクエリのCriteria APIバージョンもあります!

関連する問題