NHibernate投影.强制转换为自定义类型

本文关键字:自定义 类型 转换 投影 NHibernate | 更新日期: 2023-09-27 18:14:16

我的数量列是一个int。我想在它上使用Like,然后我尝试将它的类型转换为字符串。

要做到这一点,我使用:

 Expression.Like(
 Projections.Cast( NHibernateUtil.String,
 Projections.Property<ErrorSummaryEntity>(x => x.Quantity)),
 searchValue, MatchMode.Anywhere)

它几乎奏效了。它生成这样的sql。

 cast( this_.ILOSC as NVARCHAR2(255)) like :p1

这里的问题是NVARCHAR。我需要找VARCHAR。

我怎么能拿到这个?cast( this_.ILOSC as VARCHAR2(255)) like :p1

第二个可能有帮助的问题是:如果我有这样的映射:

Map(x => x.Quantity) .Column("ILOSC")

这就是为什么我使用lambda来处理这个列。是否可以检索映射的列名?

var colName = //some action to return "ILOSC"

Projections.Property<ErrorSummaryEntity>(x => x.Quantity)给了我"数量"。如何获取"ILOSC"?

如果我得到这个列名,我可以使用Expression.Sql().

NHibernate投影.强制转换为自定义类型

您就快到了,只是我们必须使用:NHibernateUtil.AnsiString而不是NHibernateUtil.String

Expression.Like(
    // Projections.Cast( NHibernateUtil.String,
    Projections.Cast( NHibernateUtil.AnsiString,
    Projections.Property<ErrorSummaryEntity>(x => x.Quantity)),
        searchValue, MatchMode.Anywhere)

参见:5.2.2。基本值类型