Pregunta

Tengo un requisito en el que necesito mostrar una lista de empleados y sus roles. Entonces, si el papel del empleado es contable, quiero mostrar el nombre de primer nombre y el nombre de ese empleado. A continuación se muestra mi código para ello

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"));

La tabla de roles de la empresa tiene IDSUD como clave extranjera para la ID de clave principal de la tabla de usuario. ¿Cómo es posible obtener el campo FirstName LastName en las cadenas "Cuenta" y "Gerente" anteriores? El código anterior no funciona y pone valores redundantes de nombres en ambos de la cadena. Además, tengo un campo de último nombre y quiero agregarlo al primer nombre en ambas cuerdas. ¿Alguien puede explicar cómo lo lograré? Además, en la consulta anterior he usado proyecciones. Property dos veces, lo que sé que está mal, pero solo quería dar una idea de lo que estaba buscando.

¿Fue útil?

Solución

¿Tiene que estar en la declaración SQL? ¿No sería suficiente para:

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top