2008-10-10 1 views
3

Это SQL, что я хочу сделать:NHibernate Критерии: объединение двух столбцов с IN Expression

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

Я не могу за жизнь мне найти подходящее выражение для этого. И я не думаю, что могу использовать два выражения, поскольку имя домена и имя группы должны быть объединены.

Спасибо!

ответ

3

Можете ли вы не использовать два выражения?

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

Другой вариант - использовать Expression.Sql.

0

Я хотел бы указать, что два выражения НЕ будут работать, поскольку мне нужно одно выражение.

Доменное имя и имя_группы необходимо конкатенировать до того, как произойдет событие. Подумайте имена пользователей в учетной записи домена. Имя домена и имя_группы вместе уникальны, но не каждый отдельно.

2

Expression.Sql выглядит следующим образом:

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

Вы можете добавить поле формулы только для чтения в вашей карте. Вы сможете запросить его таким образом. Это будет выглядеть следующим образом, используя Fluent NHibernate

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

запрос будет выглядеть следующим образом

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