NHibernate使用强制转换为char创建SQL查询

时间:2012-10-09 12:16:41

标签: nhibernate linq-to-nhibernate

我使用NHibernate查询一些数据。 C#看起来像这样:

        var query = NHibernateSession.Query<T>();
        if (!emptyFilter)
        {
            query = query.Where(filter);
        }

过滤器表达式是这样的:

  

(iif(City == null,“”,City).ToString()。ToUpper()=“Irgendwo im   Niemandsland City取决于“.ToUpper()”

生成的SQL如下:

  

选择... atedBy_LoginName为CreatedBy27_0_,   attorney0_.ModifiedBy_DisplayName为ModifiedBy28_0_,   attorney0_.ModifiedBy_LoginName as ModifiedBy29_0_,ROW_NUMBER()   OVER(ORDER BY CURRENT_TIMESTAMP)as __hibernate_sort_row from   tblAttorney attorney0_

     

where upper( cast (cast)(当attorney0_.City为null时为@ p1   其他attorney0_.City以NVARCHAR(4000)结尾为 char ))= @ p2)

     

as query WHERE query .__ hibernate_sort_row&gt; @ p3 ORDER BY   查询.__ hibernate_sort_row',N'@ p0 int,@ p1 nvarchar(4000),@ p2   nvarchar(4000),@ p3 int',@ p0 = 100,@ p1 = N'',@ p2 = N'Irgendwo im   Niemandsland City',@ p3 = 0

这个转换为char会截断超过30的字符串(SQL deafult值),这意味着我没有收回任何数据。我还在使用DynamicQueryable来创建查询。我不知道在哪里搜索。我不知道为什么这个被装入char。


DynamicQueryable中的Where方法如下所示:

public static IQueryable Where(this IQueryable source, string predicate, params object[] values)
{
    if (source == null) throw new ArgumentNullException("source");
    if (predicate == null) throw new ArgumentNullException("predicate");
    LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values);
    return source.Provider.CreateQuery(
        Expression.Call(
            typeof(Queryable), "Where",
            new Type[] { source.ElementType },
            source.Expression, Expression.Quote(lambda)));
}

谓词是过滤器“(iif ...)”作为字符串。

0 个答案:

没有答案