0

我正在使用 Visual Studio 2008。我正在尝试在 Nhibernate.Projections 类的单个 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");
4

1 回答 1

0

一般来说,除了RowCount,我们可以使用SumGroupPropertySqlGroupProjection

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 和 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>())
于 2016-11-10T11:06:24.567 回答