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,但我没有看到关于如何使用它的任何文件。

有帮助吗?

解决方案

您可以尝试设置结果变压器:

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

其他提示

我还没有能找到一个解决这个问题的具体。我发布一个类似的问题,前几天。 (http://stackoverflow.com/questions/3921457/nhibernate-entity-access-through-projection)的错误信息是监守NHibernate的是寻找你的产品类名为类别属性。我认为没有一个。该ONY工作,我身边已经能够迄今为止发现使用DTO。同时,使用表达式树,Lambda表达式和或ExpressionSelector寻找更深的动态DTO发电机和动态的LINQ to NHibernate的。所有这一切都似乎比较复杂。我希望有设置实体dynamiclly,即一个简单的解决方案投影。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top