0

Я использую Visual Studio 2008. Я пытаюсь добавить несколько столбцов внутри одного метода GroupProperty класса Nhibernate.Projections. Но но я не могу получить требуемый результат. Я попробовал что-то вроде этого.Как добавить несколько столбцов внутри одного метода GroupProperty для Nhibernate Projections Класс

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

Как правило, в сторону с RowCount, Sum и GroupProperty мы можем использовать 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>()) 
Смежные вопросы