Domanda

Ho un requisito in cui ho bisogno di visualizzare un elenco di dipendenti e loro ruoli. Quindi, se il ruolo del dipendente è contabile, voglio mostrare il primo nome e il lastname di quel dipendente. Di seguito è il mio codice per questo

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 tabella di ruolo dell'azienda ha UserID come chiave esterna per l'ID chiave primaria della tabella utente. Come è possibile ottenere il campo LastName FirstName in "Account" e "Manager" Strings sopra. Il codice sopra non funziona e mette i valori ridondanti di nomi in entrambe le stringhe. Inoltre, ho un campo LastName e voglio aggiungerlo al primo nome in entrambe le corde. Qualcuno può spiegare come raggiungerò questo? Inoltre, nella query sopra ho usato proiezioni. Property due volte che so è sbagliato, ma volevo solo dare un'idea di ciò che stavo cercando.

È stato utile?

Soluzione

Deve essere nell'istruzione SQL? Non sarebbe sufficiente:

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top