使用NHibernate ICriteria查询时选择常量值到字段的实现方案咨询
直接使用Projections.Constant本身即可实现常量字段查询,不需要借助条件投影绕路,这是最高效且符合NHibernate设计的实现方案,生成的SQL不会包含多余的判断逻辑,和你预期的格式完全一致。
你要实现SELECT ID, 'ConstantTile' Title FROM Table的效果,ICriteria 写法如下:
// 构造查询 ICriteria criteria = session.CreateCriteria<YourTableEntity>(); criteria.SetProjection( Projections.ProjectionList() .Add(Projections.Property("ID")) // 直接添加常量投影,指定别名即可 .Add(Projections.Constant("ConstantTile", NHibernateUtil.String).As("Title")) ); // 如需映射到DTO对象,可以搭配别名转换器使用 criteria.SetResultTransformer(Transformers.AliasToBean<YourResultDto>()); var resultList = criteria.List<YourResultDto>();
你原来的工具方法可以直接简化为:
public static IProjection GetStringConstantProjection(string desiredResult) { return Projections.Constant(desiredResult, NHibernateUtil.String); }
如果要返回其他类型的常量,只需要替换NHibernateUtil.String为对应类型即可,比如NHibernateUtil.Int32对应整数、NHibernateUtil.DateTime对应日期类型,生成的SQL会自动适配对应常量的语法。
内容的提问来源于stack exchange,提问作者KeldJ
相关产品推荐
相关产品推荐

