2014-09-22 1 views
0

Dans ma requête, une personne peut avoir plusieurs positions.Comment faire une projection selon un conditionnel sans sous-requête en utilisant nHibernate

Personne -> Travail [IdJob]

Nécessité de faire une projection pour le poste de gestionnaire pour un champ et une autre projection pour le poste de gestionnaire pour les autres champs

sans utiliser sous-requête. Peut-il être fait?

Exemple:..

.SelectList (SI => sl .SelectGroup (S => s Nom) .WithAlias ​​(() => rel individuel) Où (() => Person.idJob = 1)

/* Funcionaraia comme si, ici, je pourrais concevoir un membre du conseil d'administration dans le domaine de la classe administrateur projeté */

.SelectGroup (s => s.) Nom .WithAlias (() => administrateur rel.)

Où (() => Person.idJob = 2)

/* Gestionnaire pour la même */

.SelectGroup (S => s. Nom) .WithAlias ​​(() => rel.) Gestionnaires

Répondre

0
var personName = Projections.Property<Person>(p => p.Name); 
var none = Projections.Constant(null); 
session.QueryOver<Person>() 
    .Select(
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Manager), personName, none).WithAlias(() => rel.Manager), 
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Administrator), personName, none).WithAlias(() => rel.Administrator), 
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Employee), personName, none).WithAlias(() => rel.Individual) 
     ); 
+0

Merci Firo! Avoir une erreur dans l'attribut "none" -> Le nom "none" n'existe pas dans le contexte. Ne pas contexte Mais de toute façon, j'ai besoin de deux conditions pour vérifier que la personne a un travail actif par exemple. Ce cas nécessite la sous-requête, non? –

+0

none est une variable locale définie juste au-dessus de la requête. Comment peut-il être inconnu? Si votre Job est une entité et que vous avez besoin de restrictions, vous avez besoin d'une sous-requête accessible via la classe 'Subqueries' – Firo

Questions connexes