Question

J'ai une exigence dans laquelle je dois afficher une liste des employés et de leurs rôles. Donc, si le rôle de l'employé est comptable, je veux afficher FirstName et LastName de cet employé. Ci-dessous mon code pour elle

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

Le tableau de rôle de la société a userid comme une clé étrangère à l'ID clé primaire de la table utilisateur. Comment est-il possible d'obtenir le champ Prénom Nom dans les chaînes « compte » et « gestionnaire » ci-dessus. Le code ci-dessus ne fonctionne pas et il met les valeurs redondantes des noms à la fois la chaîne. De plus, j'ai un champ LastName et je veux ajouter que la FirstName dans les deux chaînes. Quelqu'un peut-il s'il vous plaît expliquer comment vais-je y parvenir? En outre, dans la requête ci-dessus, j'ai utilisé deux fois projections.property que je sais est faux, mais je voulais juste donner une idée de ce que je cherchais.

Était-ce utile?

La solution

t-il d'être dans l'instruction SQL? Ne serait-il suffire à:

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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top