NHibernate投影:如何使用带投影的CriteriaAPI获取类型化类型

NHibernate投影:如何使用带投影的CriteriaAPI获取类型化类型,nhibernate,projection,criteria-api,Nhibernate,Projection,Criteria Api,如何以列表类型获取结果 我看到有一个函数Projection.Cast,但我没有看到任何关于如何使用它的文档。您可以尝试设置一个结果转换器: public class ProductRow { public int Id { get; set; } public string Name { get; set; } public double Price { get; set; } } var result=GetSession() .CreateCriteria(

如何以列表类型获取结果


我看到有一个函数Projection.Cast,但我没有看到任何关于如何使用它的文档。

您可以尝试设置一个结果转换器:

public class ProductRow
{
     public int Id { get; set; }
     public string Name { get; set; }
     public double Price { get; set; }
}
var result=GetSession()
.CreateCriteria()
.SetProjection(Projections.ProjectionList()项目)
.Add(Projections.Property(“Id”),“Id”)
.Add(Projections.Property(“名称”),“名称”)
.添加(预测、财产(“价格”),“价格”)
)
.SetResultTransformer(Transformers.AliasToBean())
.List();

请注意,在添加每个投影时,使用别名指向
ProductRow
的属性名称。

porprojection-->projection Ceritria-->Criteria
.Add(Projections.property(“Category.name”),“Category”)
在这种情况下,出现错误:“无法解析属性:Category.Name of Project.Domain.Model.Product”。我认为您需要为Category属性添加别名,并改用别名。因此,如果您使用AddAlias为“Category”赋予别名“c”,那么您应该使用“c.Name”而不是“Category.Name”。
public class ProductRow
{
     public int Id { get; set; }
     public string Name { get; set; }
     public double Price { get; set; }
}
var result = GetSession()
    .CreateCriteria<Product>()
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.Property("Id"), "Id")
        .Add(Projections.Property("Name"), "Name")
        .Add(Projections.Property("Price"), "Price")
    )
    .SetResultTransformer(Transformers.AliasToBean<ProductRow>())
    .List<ProductRow>();