NHibernate Projections.Cast 为自定义类型

问题描述 投票:0回答:1

我的数量列是一个整数。我想在它上面使用 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().

c# nhibernate type-conversion projection
1个回答
1
投票

你就快到了,只是我们必须使用:

NHibernateUtil.String
来代替
NHibernateUtil.AnsiString

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

参见:5.2.2。基本值类型

© www.soinside.com 2019 - 2024. All rights reserved.