Nhibernate QueryOver 项目枚举描述到字符串

Nhibernate QueryOver Project enum description to string

假设我们有以下使用 Nhibernate 的查询:

var query = session.QueryOver<TenantOrder>(() => tenantOrderAlias)
    .JoinAlias(() => tenantOrderAlias.Tenant, () => tenantAlias)
    .JoinAlias(() => tenantAlias.Building, () => buildingAlias)
    .WhereRestrictionOn(x => tenantOrderAlias.Id.OrderId).IsLike(order.Id);

query.Select(
    Projections.Property(() => tenantAlias.Id).WithAlias(() => tenantDto.Id),
    Projections.Property(() => tenantAlias.TenantNr).WithAlias(() => tenantDto.TenantNr),
    Projections.Property(() => buildingAlias.BuildingNr).WithAlias(() => tenantDto.BuildingNr),
    Projections.Property(() => tenantAlias.Floor).WithAlias(() => tenantDto.Floor),
    Projections.Property(() => tenantOrderAlias.InstallationStatus).WithAlias(() => tenantDto.InstallationStatusName //?   ));

我们要将 InstallationStatus(枚举类型)从 tenantOrderalias 处理到 InstallationStatusName(属性 来自 tenantDto 的字符串类型)。枚举的结构如下所示:

public enum TenantInstallationStatusEnum
{
    [StringEnum("MS3_TenantInstallationStatus_TS0")]
    TS0,//open
    [StringEnum("MS3_TenantInstallationStatus_TS2")]
    TS2,//abgelesen
}

我们想要获取枚举的描述,并将其放入tenantDto.InstallationStatusName。这可能使用 QueryOverICriteria 吗? 我们找不到任何关于此问题的 post。

一般来说,我们只能项目 存在于数据库端或作为"formula" 传递的内容。所以,我们可以将状态转换成这样的条件语句:

// this projection
Projections
    .Property(() => tenantOrderAlias.InstallationStatus)
    .WithAlias(() => tenantDto.InstallationStatusName //?   ));

// could be converted into string values with this statement
Projections
    .Conditional(
        Restrictions.Where<TenantOrder>(to => 
            to.InstallationStatus == TenantInstallationStatusEnum.TS0),
        Projections.Constant("MS3_TenantInstallationStatus_TS0"),
        Projections.Constant("MS3_TenantInstallationStatus_TS2")
    ).WithAlias(() => tenantOrderAlias.InstallationStatusName)
);

条件甚至可以嵌套...但最终可能会更具挑战性。

但是,实际上可能更容易的是在 C# 中,在应用程序端处理此转换 ex-post...