nhibernate group by select列基于限制

时间:2011-12-11 14:09:03

标签: nhibernate group-by

我有一个看起来很简单的问题,我现在无法理解。

我有一张这样的表:

id | type | value | comment | date
1      1      22     test     dec 2nd
2      1      23     foo      dec 4th
3      2      2      bar      dec 1st

基于模型

class MyClass
  public virtual long Id { get; set;}
  public virtual long Type { get; set;}
  public virtual long Value { get; set;}
  public virtual string comment { get; set;}
  public virtual DateTime Date { get; set;}

我需要按类型分组并选择具有最新日期的行。 (即,获取ID为2且ID为3的行。)

有人可以提供标准,说明如何执行此操作吗?

1 个答案:

答案 0 :(得分:2)

两次往返,1获取所需行的类型/日期,1组合获得每一行。 FutureValue<>会将循环中的每个Query组合到一个往返中,select会将FutureValues转换为实际值。

class TypeDate
{
    public long Type { get; set; }
    public DateTime Date { get; set; }
}

var groups = session.CreateCriteria<MyClass>()
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.GroupProperty("Type"), "Type")
        .Add(Projections.Max("Date"), "Date"))
    .SetResultTransForm(Transformers.AliasToBean<TypeDate>());
    .List<TypeDate>();

List<IFutureValue<MyClass>> futures = new List<IFutureValue<MyClass>>(groups.Count);
foreach (var group in groups)
{
    futures.Add(session.CreateCriteria<MyClass>()
        .Add(Restrictions.Eq("Type", group.Type))
        .Add(Restrictions.Eq("Date", group.Date))
        .FutureValue<MyClass>());
}

IEnumerable<MyClass> results = futures.Select(future => future.Value).ToList();
相关问题