0

複雑なロジックでフィルタリングおよびソートされたレコードを返す必要があります。データベース側(関数またはストアドプロシージャ)でソートとフィルタリングを行う予定です。

クエリのフィルタリングを行うために、QueryOver または Criteria 構文でプロシージャまたは関数を呼び出すことは可能ですか?

CallProcedure - プロシージャ/関数を呼び出している、以下に示すコードのようなもの

var articles = Session.QueryOver<ArticleData>()
    .Where(x => x.CompanyId == 1)
    .CallProcedure???
    .Skip(startIndex)
    .Take(number).List();

手伝ってくれてありがとう。

4

1 に答える 1

2

まず、カスタム方言を作成して、NHibernate に関数を登録する必要があります。

public class MyDialect : MsSqlServer2008Dialect
{
    public MyDialect() 
    {
        RegisterFunction("myfunction", new SQLFunctionTemplate(...));
    }
}

その後、クエリ内で関数を使用できます。

var articles = Session.QueryOver<ArticleData>()
    .Where(x => x.CompanyId == 1)
    .Where(Projections.SqlFunction("myfunction", ...))
    .Skip(startIndex)
    .Take(number).List();

それらの線に沿った何か。ただし、フィルターと並べ替えの両方を実行できるかどうかはわかりません。その場合は、データベース ビューの方が適しているかもしれません。

開始するためのリンク:
NHibernate QueryOver で SQL 関数を使用できますか?
NHibernate QueryOver SQLFunction in where 節
NHibernate の QueryOver 構文は SqlFunction の MAX() を選択できますか?

于 2012-07-25T09:33:35.187 に答える