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
值的正確方法是什麼?