如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?

Posted

技术标签:

【中文标题】如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?【英文标题】:How to set type of parameter in linq to nhibernate query for char(*) type? 【发布时间】:2016-11-30 04:02:34 【问题描述】:

我有一个按 char(4) 类型在 Person 表中的 Code 列。

人表是:

人 Hbm 是:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Model">      
  <class name="Person" table="Person">    

     <property name="Code" >      
        <column name="Code" **sql-type="char(4)"**/>    
     </property>

     ...

  </class>
</hibernate-mapping>

现在我有一个 linq to nhibernate 查询:

SessionInstance.Query<Person>()
               .Where(x => x.Code == "1234")
               .Select(x => x.Code)
               .ToList();

但不希望在 sql profiler 中跟踪查询。

exec sp_executesql N'select person_.Code as col_0_0_ from Person person_ where person_.Code=@p0',N'@p0 nvarchar(4000)',@p0=N'1234'

因为@p0 的类型不是char(4)@p0 的值是N'1234' 而不是'1234'

而且此查询的性能较低:

什么原因?

【问题讨论】:

【参考方案1】:

省略显式类型声明应该完全没问题。通常,您需要定义数据类型的唯一场景是 NHibernate 不默认为您打算使用的数据类型(常见于日期/时间数据类型的某些变体)。

【讨论】:

【参考方案2】:

这是 NHibernate 4.0 中的一个已知限制: https://nhibernate.jira.com/browse/NH-3403

【讨论】:

以上是关于如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Linq 方法 Contains() 针对 char 数组检查字符串,因为该数组不是 String 类型,转换为 String 类型失败

C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”

如何使用 linq 将 DATETIME 类型的列转换为字符串

在 C 中,如何修复此警告:格式“%s”需要“char *”类型的参数,但参数 3 的类型为“char (*)[100]

char *怎样转成int

如何将char类型数组转换为unicode字符串