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,但我没有看到任何关于如何使用它的文档。
答案 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。所有这些看起来都比较复杂。我希望有一个简单的解决方案来动态设置实体,即。投影。