2008-10-10 6 views
3

Ceci est le SQL que je veux accomplir:NHibernate Critères: concaténer deux colonnes avec une expression IN

WHERE domain_nm + '\' + group_nm in ('DOMAINNAME\USERNAME1','DOMAINNAME2\USERNAME2') 

Je ne peux pas pour la vie de me trouver une expression appropriée pour cela. Et je ne pense pas pouvoir utiliser deux expressions car le nom de domaine et le nom du groupe doivent être concaténés.

Merci!

Répondre

3

Ne pouvez-vous pas utiliser deux expressions?

criteria 
    .Add(Expression.In("DomainName", new string[] { "DOMAINNAME", "DOMAINNAME2" })) 
    .Add(Expression.In("GroupName", new string[] { "USERNAME1", "USERNAME2" }) 

L'autre option consiste à utiliser Expression.Sql.

0

Je voudrais juste souligner que deux expressions ne fonctionneront pas car j'ai besoin d'une seule expression.

Le nom de domaine et le nom de groupe doivent être concaténés avant que l'entrée ne se produise. Pensez aux noms d'utilisateur sur un compte de domaine. Le DomainName et le GroupName ensemble sont uniques, pas chacun séparément.

2

Le Expression.Sql se présente comme suit:

.Add(Expression.Sql(String.Format("{{alias}}.domain_nm + '\' + {{alias}}.group_nm in ({0})", getSqlInString(userGroups)))) 
0

Vous pouvez ajouter un champ de formule dans votre carte readonly. Vous pourrez l'interroger de cette façon. Il ressemblerait à ceci en utilisant NHibernate couramment

Map(x => x.FullName).Formula("[domain_nm] + '\' + [group_nm]") 

La requête doit ressembler à ce

criteria.Add(Expression.In("FullName", new string[] { "DOMAINNAME\USERNAME1", "DOMAINNAME2\USERNAME2" })) 
Questions connexes