0

NH Criteria で Expression.Sql を使用したいのですが、オーバーロードが機能せず、ドキュメントも見つかりません。

パラメータはどこに入力すればよいですか?

私は NH DetachedCriteria を持っていますが、SQL 式を使用する必要があります。これは、2 方向で LIKE を実行することが不可能であるためです。

だから私はこれを追加します

            criteria.Add(Expression.Sql(@"(
                    UPPER(RIGHT(RTRIM(LTRIM('?')), ?)) like '%'+UPPER(RIGHT(RTRIM(LTRIM(?)), ?)) 
                    OR UPPER(RIGHT(RTRIM(LTRIM(?)), ?)) like '%'+UPPER(RIGHT(RTRIM(LTRIM('?')), ?))  
                )  and len('?') >= ?",
                            new Object[]{
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                                "aaa",
                            }
                            , new NHibernate.Type.IType[]{
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String,
                                NHibernateUtil.String
                            }
                ));

インデックスが範囲外の例外を取得し続けます

パラメータが一致することを保証します。エラーでも、110 個の「?」と 10 個のパラメーターを含むクエリが表示されます。

どうすればトリオを行うことができますか?

4

1 に答える 1

1

クエスチョン マークのいくつかは、引用符で囲まれています。'?'

これらは、パラメーターのプレースホルダーとして解釈されるのではなく、単一の疑問符を含む文字列リテラルとして解釈されます。したがって、実際には 10 個ではなく 7 個のパラメーターしかありませんが、10 個の値を渡しています。

于 2013-10-25T13:56:07.010 に答える