3

以下に示すように、Nhibernate 3.3.2.4000 が orderby 句で使用される正しいサブクエリを生成するのに問題があります。

select *
from dbo.Person p inner join dbo.Task t on p.Task_FK = p.TaskId    
order by (select p.CustomerNumber where p.IsMain=1) desc 

次の 2 つのエンティティがTaskあります。Person

1 つのタスクには N 人の関係者を含めることができます。つまり、Task には IList プロパティがあります。

Nhibernate に正しいサブクエリを生成させるにはどうすればよいですか? クエリ API を使用して、次のようなことを実現しました。

query = query.OrderBy(x => x.Persons.Single(t => t.CustomerNumber));

しかし、元のSQLクエリに表示されているようにwhere句を正しく生成する方法がわかりません。これはおそらく、queryover api を使用して簡単に実行できますか?

アドバイスやガイダンスは大歓迎です。

4

1 に答える 1

1
Task task = null
Person person = null;
var subquery = QueryOver.Of<Task>()
    .Where(t => t.Id == task.Id)
    .JoinQueryOver(t => t.Persons, () => person)
    .Where(p => p.IsMain)
    .Select(() => person.CustomerNumber);

var query = session.QueryOver(() => task)
    .OrderBy(Projections.SubQuery(subquery))
    .FetchMany(x => x.Persons)

return query.List();
于 2012-11-28T14:09:12.950 に答える