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。这可能使用 QueryOver
或 ICriteria
吗?
我们找不到任何关于此问题的 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...
假设我们有以下使用 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。这可能使用 QueryOver
或 ICriteria
吗?
我们找不到任何关于此问题的 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...