nhibernate - 在 Concat 投影中使用 Cast Projection

标签 nhibernate projection queryover

我有以下查询:

var result = _session.QueryOver<Entity>()
    .Where(e => e.Property == value)
    .SelectList(list => list
        .Select(f => Projections.Concat("prefix-", e.BigIntProperty)).WithAlias(() => alias.Whatever)
        ...
    )
    .TransformUsing(Transformers.AliasToBean<Model>())
    .Future<Model>();

问题是Projections.Concat()只接受字符串,因为 e.BigIntProperty不是,上面的不能编译。有没有办法投e.BigIntProperty串?

我尝试了以下类似的方法,但也不起作用:
.Select(f => Projections.Concat("prefix-", Projection.Cast(NHibernateUtil.String, e.BigIntProperty))).WithAlias(() => alias.Whatever)

, 自 Projections.Cast返回 IProjection而不是字符串。

最佳答案

Projections.Cast似乎非常有限,因为它不能随意使用 Projection s。幸运的是,您可以轻松创建自己的自定义投影,使您能够做到这一点:

public static class CustomProjections
{
    public static IProjection Concat(params IProjection[] projections)
    {
        return Projections.SqlFunction(
            "concat",
            NHibernateUtil.String,
            projections);
    }
}

然后,您就可以使用您的 CustomProjections像这样的类:
var result = _session.QueryOver<Entity>()
    .Where(e => e.Property == value)
    .SelectList(list => list
        .Select(CustomProjections.Concat(
            Projections.Constant("prefix-"),
            Projections.Cast(
                NHibernateUtil.String,
                Projections.Property<Entity>(e => e.BigIntProperty))))
            .WithAlias(() => alias.Whatever)
        ...
    )
    .TransformUsing(Transformers.AliasToBean<Model>())
    .Future<Model>();

关于nhibernate - 在 Concat 投影中使用 Cast Projection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831677/

相关文章:

NHibernate 在 QueryOver 中检查相同的连接

nhibernate - 将来自文件的数据库配置与 Fluent NHibernate 映射混合

nhibernate - NHibernate中的SQL 2008 HierarchyID支持

c# - NHibernate 的 cfg.xml 文件的单声道验证

nhibernate - Nhibernate 是企业应用程序的正确选择吗?

c++ - 翻页效果

java - 兰伯特等角圆锥 map 投影在java中获取网格的x,y值

nhibernate - NHibernate QueryOver 中的 GUID 比较引发错误

nhibernate - NHibernate 中的投影