使用NHibernate Criteria来汇总多个属性/列

Jon*_*noW 3 nhibernate criteria

有谁知道如何使用NHibernate标准表达以下SQL语句?

SELECT SUM(Val1 + Val2) FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但是AFAIK我似乎无法找到一种方法来做到这一点而不返回一个值数组,Val1 + Val2的总和分别然后从数组求和,我想避免.

Mic*_*aga 6

在博客文章的评论中,@ Jaguar在他的回答中提到NHibernate和缺少的OperatorProjection是另一种解决方案:

session.CreateCriteria().SetProjection(
    Projections.Property<SomeType>(val => val.Id),
    Projections.Property<SomeType>(val => val.Duration),
    Projections.SqlFunction(
        new VarArgsSQLFunction("(", "+", ")"),
        NHibernateUtil.Double,
        Projections.Property<SomeType>(val => val.Duration),
        Projections.Constant(1)
    )
).List();
Run Code Online (Sandbox Code Playgroud)

所有功劳都归功于Tomek.

这可能看起来像:

Projections.Sum(
    Projections.SqlFunction(
        new VarArgsSQLFunction("(", "+", ")"),
        NHibernateUtil.Int32,
        Projections.Property<SomeTableType>(val => val.Val1),
        Projections.Property<SomeTableType>(val => val.Val2)
    )
)
Run Code Online (Sandbox Code Playgroud)

特别VarArgsSQLFunction有用.


Jag*_*uar 5

好吧,在第n次阅读这个确切问题的问题后,我决定编写一个不包括编写SQL的实现.

您可以在http://savale.blogspot.com/2011/04/nhibernate-and-missing.html上查看您可以编写的实现:

criteria.SetProjection(
                 new ArithmeticOperatorProjection("+",
                                 NHibernateUtil.Int32,
                                 Projections.Property("Prop1"), Projections.Property("Prop2")
                                                  )
                );
Run Code Online (Sandbox Code Playgroud)