帮助条件投影查询

时间:2011-06-14 18:24:57

标签: c# nhibernate nhibernate-criteria nhibernate-projections

我有一个要求,我需要显示员工及其角色列表。因此,如果员工的角色是会计,我想显示该员工的FirstName和LastName。以下是我的代码

SearchTemplate RoleTemplate = new SearchTemplate();
           RoleTemplate.Criteria = DetachedCriteria.For(typeof(CompanyRole), "CR");

      RoleTemplate.Criteria.CreateCriteria("User", "User")
        .SetProjection(Projections.ProjectionList()
            .Add((Projections.Conditional
                        (Restrictions.Eq("CR.Role", Role.Accounting),
                              Projections.Property("User.FirstName"), Projections.Property("User.FirstName"))), "Account")
                               .Add((Projections.Conditional
                        (Restrictions.Eq("CR.Role", Role.Manager),
                              Projections.Property("User.FirstName"), Projections.Property("User.FirstName"))), "Manager"));

公司角色表将userid作为User表主键ID的外键。如何在上面的“帐户”和“管理员”字符串中获取名字姓氏字段。上面的代码不起作用,它在字符串中放置了名称的冗余值。此外,我有一个LastName字段,我想将其附加到两个字符串中的FirstName。任何人都可以解释我将如何实现这一目标?另外,在上面的查询中我使用了两次projection.property,我知道这是错的,但我只是想知道我在寻找什么。

1 个答案:

答案 0 :(得分:1)

是否必须在sql语句中?这不足以:

var result = CreateCriteria<User>()
    .CreateAlias("CompanyRole", "cr")
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.Property("FirstName"))
        .Add(Projections.Property("LastName"))
        .Add(Projections.Property("cr.Role"))
        )
    .List<object[]>();

foreach (var item in result)
{
    string name = string.Concat(item[0], item[1]);
    Role role = (Role)item[2];

    // do something with name and role
}