首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Criteria-api返回未映射对象的NHibernate查询

使用Criteria-api返回未映射对象的NHibernate查询
EN

Stack Overflow用户
提问于 2011-02-27 00:26:21
回答 1查看 959关注 0票数 1

我想查询一个nhibernate映射的类,但结果应该是一个未映射的对象。映射和未映射的类如下所示:

代码语言:javascript
复制
[Class(NameType = typeof(ClassA)]
public class ClassA
{
    [Cache(0, Usage = CacheUsage.ReadWrite)]
    [Id(1, Name = "Id", UnsavedValue = null)]
    [Generator(2, Class = "native")]
    public virtual long? Id { get; set; }

    [Property]
    public virtual string PropertyA { get; set; }

    [Property]
    public virtual string PropertyB { get; set; }

}

public class ClassB
{
    public string PropertyA { get; set; }

    public string PropertyB { get; set; }

    public int Number { get; set; }
}

我使用这个方法来得到我想要的结果:

代码语言:javascript
复制
public ICollection<ClassB> Group()
{
    var result =
        Session.CreateCriteria(typeof(ClassA)).SetProjection(
            Projections.ProjectionList().Add(Projections.RowCount(), "Number")
                   .Add(Projections.GroupProperty("PropertyA"))
                   .Add(Projections.GroupProperty("PropertyB")));

    return
        (result.List().Cast<IList>().Select(
            entry =>
            new ClassB {
                        Number = (int)entry[0],
                        PropertyA = (string)entry[1],
                        PropertyB = (string)entry[2] 
                    }
             )).ToList();
}

这可以很好地工作,但是没有更直接的方法使用criteria-api来实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-27 00:53:50

好的,就这么做吧

代码语言:javascript
复制
result.SetResultTransformer(Transformers.AliasToBean<ClassB>());
result.List<ClassB>();

您还需要将属性投影包装为别名Projections.Alias(Projections.GroupProperty("PropertyA"), "PropertyA")

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5128112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档