在NHibernate QueryOver SelectGroup中截断日期时间

在NHibernate QueryOver SelectGroup中截断日期时间,nhibernate,datetime,group-by,truncate,queryover,Nhibernate,Datetime,Group By,Truncate,Queryover,我有一个相当普通的查询,包含以下内容: .SelectList(list => list .SelectGroup(() => txn.GroupField) .SelectGroup(() => txn.Date)) .List<object[]>() 有什么想法吗 谢谢您的查询可能如下所示: Status alias = null; var query = QueryOver.Of(() => alias) .Select(Pro

我有一个相当普通的查询,包含以下内容:

.SelectList(list => list
    .SelectGroup(() => txn.GroupField)
    .SelectGroup(() => txn.Date))
.List<object[]>()
有什么想法吗


谢谢

您的
查询可能如下所示:

Status alias = null;
var query = QueryOver.Of(() => alias)
    .Select(Projections.GroupProperty(
        Projections.SqlFunction("date", NHibernateUtil.Date, Projections.Property(() => alias.Date))));
输出(伪sql):


希望这有帮助,干杯

您可能希望使用Formula命令将helper属性添加到地图中,以便能够在查询中使用日期(而不是日期时间)

下面是我的代码中的一个示例;它使用十进制值,但这适用于任何子查询:

模型类具有要映射到公式的以下属性:

public virtual decimal Profit
{
    get { return this.SellPrice - this.Cost; }
    set { return; }
}
fluentNHibernate地图:

//SellPrice and Cost are columns in the object's table
Map(v => v.Profit).Formula("(SellPrice - Cost)"); // this field is calculated, not read
不过,一定要把公式放在()括号之间


如果您想将公式设置为一个select查询,将日期时间分为一个日期,那么您可以在查询中按该属性分组。

非常感谢MonkeyCoder。我尝试将SelectList()/.SelectGroup()用于投影,但失败。
public virtual decimal Profit
{
    get { return this.SellPrice - this.Cost; }
    set { return; }
}
//SellPrice and Cost are columns in the object's table
Map(v => v.Profit).Formula("(SellPrice - Cost)"); // this field is calculated, not read