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

几个问号周围有引号:'?'

这些不会被解释为参数占位符,而是作为包含单个问号的字符串文字。所以你真的只有 7 个参数,而不是 10 个,但是你传入了 10 个值。

于 2013-10-25T13:56:07.010 回答