2009-09-21 2 views
2

Как сделать следующее в NHibernate?Поиск по нескольким столбцам в NHibernate

SELECT ContactName, ContactTel1, ContactTel2, ContactTel3 
    FROM tb_Contact 
    WHERE (ContactTel1 LIKE '%6440%') OR 
     (ContactTel2 LIKE '%6440%') OR 
     (ContactTel3 LIKE '%6440%') 

Это то, что у меня есть, но не могу понять, как сделать то же самое с несколькими столбцами.

all = session.CreateCriteria(typeof(Contact)).Add(Expression.Like(pField, "6440", MatchMode.Anywhere)) 
       .List<Contact>(); 

Любые указания очень ценятся.

ответ

4

Посмотрите на выражение Disjunction.

all = session.CreateCriteria (typeof(Contract)) 
       .Add (
         Restrictions.Disjunction().Add (Restrictions.Like ("Tel1", "6440") 
               .Add (Restrictions.Like ("Tel2", "6440") 
               .Add (Restrictions.Like ("Tel3", "6440") 
        ); 
+0

Это, казалось, сделать это. Благодарю. – Chin

1
session.CreateCriteria (typeof(Contract)) 
       .Add (
         Restrictions.Like ("Tel1", "6440")|| 
         Restrictions.Like ("Tel2", "6440")|| 
         Restrictions.Like ("Tel3", "6440") 
        ); 
+0

Я не думаю, что это сработает? –

+0

Вы пробовали? – Sly

+0

Действительно, это работает. Никогда не знал этого. спасибо. –

1

Вы пропустите MatchMode ...

all = session.CreateCriteria (typeof(Contact)) 
       .Add (
         Restrictions.Disjunction().Add (Restrictions.Like ("Tel1", "6440", MatchMode.Anywhere) 
               .Add (Restrictions.Like ("Tel2", "6440", MatchMode.Anywhere) 
               .Add (Restrictions.Like ("Tel3", "6440", MatchMode.Anywhere) 
        ); 
+0

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

Смежные вопросы