0

我正在使用Visual Studio 2008.我試圖在單個內部添加多列 Nhibernate.Projections類的GroupProperty方法。但是,我沒有得到所需的輸出。我嘗試過這樣的事情。如何在Nhibernate投影類的單個GroupProperty方法中添加多列

ICriteria Criteria = CreateCriteria("BaseCriteria"); 
projectionList.Add(Projections.GroupProperty(
      Projections.SqlFunction("concat", 
      NHibernateUtil.String, Projections.Property("FirstName"), 
      Projections.Constant(' '), 
      Projections.Conditional(Expression.IsNotNull("LastName"), 
      Projections.Property("LastName"), Projections.Constant(String.Empty)))), "ClientName"); 

回答

0

一般來說,除了與RowCountSumGroupProperty我們可以使用SqlGroupProjection

var projectionList = Projections.ProjectionList() 
    .Add(Projections.RowCount(), "RowCount") 
    .Add(Projections.Sum("Price"), "Price") 
    .Add(Projections.GroupProperty("StatusId"), "StatusId") 
    .Add(Projections.SqlGroupProjection(
      "LastName + ' ' + FirstName as ClientName", 
      "LastName + ' ' + FirstName", 
      new string[] {"ClientName"}, 
      new IType[] {NHibernate.NHibernateUtil.String}) 
     , "ClientName") 

別名「CLIENTNAME」重複幾次作爲別名..不知道哪些可以省略,所以更喜歡全部使用它們

而且如圖所示NHibernate GroupBy and Sum

這可能是容易轉變成

public class MyDTO 
{ 
    public virtual int RowCount { get; set; } 
    public virtual int Price { get; set; } // type depends on SUM result 
    public virtual int StatusId { get; set; } 
    public virtual string Name { get; set; } 
} 

.SetProjection(projectionList) 
.SetResultTransformer(Transformers.AliasToBean<MyDTO>())