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

时间:2010-02-14 07:30:19

标签: nhibernate projection criteria-api

 List<object[]> products = GetSession().CreateCriteria<Product>()
            .SetProjection(Projections.ProjectionList()
                               .Add(Projections.Property("Id"))
                               .Add(Projections.Property("Name"))
                               .Add(Projections.Property("Price"))
             )
             .List();
public class ProductRow
{
     public int Id { get; set; }
     public string Name { get; set; }
     public double Price { get; set; }
}

如何将结果作为List&lt; ProductRow&gt;类型?

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

2 个答案:

答案 0 :(得分:3)

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

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>();

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

答案 1 :(得分:-1)

我无法专门找到解决此问题的方法。我几天前发布了一个类似的问题。 (http://stackoverflow.com/questions/3921457/nhibernate-entity-access-through-projection)错误消息是因为NHibernate正在您的Product类中查找名为Category的属性。我假设没有一个。到目前为止我能够找到的工作是使用DTO。同样,使用表达式树,Lambda表达式和/或ExpressionSelector深入研究动态DTO生成器和动态LINQ到NHibernate。所有这些看起来都比较复杂。我希望有一个简单的解决方案来动态设置实体,即。投影。