0

私が取り組んでいるシナリオは次のとおりです。現在、次のような SQL ステートメントがあります。

SELECT a.ID,a.MsgNumber,CASE WHEN @HasAccess=1 THEN Title ELSE '*********' END AS Title FROM Messages

オペレーターは、メッセージがシステムに登録されているかどうかを確認できるが、許可されていない場合はタイトルを確認できないようにしたいと考えています。

コードのこの部分を変更して、NHibernate 基準を使用して同じ結果を生成できるようにします (ユーザーが選択したフィルターに従って動的クエリを生成できるようにします)。射影を使用して基準からいくつかのフィールドまたは定数値を取得できることは知っていますが、それらをどのように組み合わせて自分のやりたいことを行うべきかわかりません。

4

1 に答える 1

1

@HasAccess は、データベースによって決定される値ではなく、コードによって渡されるパラメーターのようです。その場合、必要なことを行う最も簡単な方法は、クエリで渡す値に基づいてコードの基準を変更することです。次に例を示します。

var projections = Projections.ProjectionList()
        .Add(Projections.Id())
        .Add(Projections.Property("MsgNumber"))
        .Add(hasAccess ? Projections.Property("Title") : Projections.Constant("*********"));

var criteria = session.CreateCriteria<Message>()
        .Add(... your restrictions ...)
        .SetProjection(projections)
        .List<object[]>();

ただし、 @HasAccess が何らかの形でデータベースによって決定される場合は、次を使用できます。

Projections.Conditional(Restrictions.Eq("HasAccess", 1),
    Projections.Property("Title"),
    Projections.Constant("*********"))

何らかの方法で HasAccess を基準に入れることができると仮定して

于 2012-05-22T08:24:18.273 に答える