0
我有一个表Foo
:如何在TimeSpan上运行NHibernate聚合?
create table Foo(
FooId uniqueidentifier not null,
UserId uniqueidentifier not null,
TimeSpent bigint not null)
这被映射到等级:
public class Foo
{
public Guid FooId {get; set;}
public Guid UserId {get; set;}
public TimeSpan TimeSpent {get; set;}
}
而在NHibernate的ClassMap<Foo>
:
Id(x => x.FooId).Not.Nullable().GeneratedBy.GuidComb();
Map(x => x.UserId).Not.Nullable();
Map(x => x.TimeSpent).Not.Nullable();
所有好为止。现在我想写一个查询来获得每个用户的聚合TimeSpent
。在一个理想的世界,将是:
return Session.Query<Foo>()
.GroupBy(f => f.UserId)
.Select(g => new { UserId = g.Key, TotalTimeSpent = g.Sum(f => f.TimeSpent) });
但是有用于加TimeSpan
值没有原生支持,所以我们反而可以说:
TotalTimeSpent = TimeSpan.FromMilliseconds(g.Sum(f => f.TimeSpent.TotalMilliseconds))
但当然,NHibernate的不知道这是什么TotalMilliseconds
属性,因为这完全是一个C#构造。
在NHibernate中聚合TimeSpan
值的正确方法是什么?