51

こんにちはqueryoverAPIを使用しているときに、「like」と「or」を組み合わせるエレガントな方法はありますか?'like'の場合、次のようなものがあります。

 query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)

'または'の場合、次のようなことができます。

query.Where( x=>x.Code == codePart || x.Description== codePart)

しかし、どうすれば次のようなクエリを作成できますか?

select * from n where'%abc%'のようなコードまたは'%abc%'のような説明

4

3 に答える 3

60

NHibernate Disjunctionクラスを使用して、これをよりエレガントな(IMHO)方法で行うことができます。

var disjunction= new Disjunction();

disjunction.Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart));
disjunction.Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart));
//(and so on)

その後:

query.Where(disjunction)

各「OR」は個別の命令であり、条件付きで述語を追加する場合に役立ちます。

于 2011-01-27T09:11:01.513 に答える
57
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) ||
            Restrictions.On<Type>(x => x.Description).IsLike(codePart))
于 2010-12-27T21:42:06.043 に答える
9

これの別のバージョンは、好みに応じて、次のようになります。

query.Where(Restrictions.Disjunction()
         .Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart))
         .Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart)));
于 2011-12-06T03:18:21.423 に答える