【问题标题】:NHibernate projection: How to get a typed type using the Criteria API with projectionNHibernate 投影:如何使用带有投影的 Criteria API 获取类型化类型
【发布时间】:2010-02-14 07:30:19
【问题描述】:
 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 类型的结果?

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

【问题讨论】:

  • 投影 --> 投影标准 --> 标准

标签: nhibernate projection criteria-api


【解决方案1】:

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

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 的属性名称。

【讨论】:

  • .Add(Projections.Property("Category.Name"), "Category") 在这种情况下我得到错误:'could not resolve property: Category.Name of Project.Domain.Model.Product'。
  • 我相信您需要为您的 Category 属性添加一个别名,并改用别名。因此,如果您使用 AddAlias 为“Category”赋予别名“c”,则应使用“c.Name”而不是“Category.Name”。
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多