2009-07-01 12 views
2

nHibernate Criteriaを使用してクエリを再作成する必要があります。このクエリにはwhere節がありましたが、これはかなり醜いものでした。nHibernate CriteriaクエリORまたはIN?

((t.Disposition_CD)='ac' Or  
(t.Disposition_CD)='cc' Or 
(t.Disposition_CD)='Co' Or 
(t.Disposition_CD)='SF' Or 
(t.Disposition_CD)='SC' Or 
(t.Disposition_CD)='OR' Or 
(t.Disposition_CD)='SV' Or 
(t.Disposition_CD)='RI' Or 
(t.Disposition_CD)='WN' Or 
(t.Disposition_CD)='NC' Or 
(t.Disposition_CD)='DN' Or 
(t.Disposition_CD)='WT' Or 
(t.Disposition_CD)='MA' Or 
(t.Disposition_CD)='TO' Or 
(t.Disposition_CD)='OC')) 

ので、私は

IList leadList = 
    session.CreateCriteria(typeof(Lead)).Add(Expression.In("CallDisposition", 
    new string[] {"AC","CC" })).List(); 

問題の鉛のプロパティCallDispositionオブジェクトであり、私はこれを行うにしようとすると、私にUnknown entity class: System.Stringエラーを与え、ここで開始しました。 CallDispositionの配列は、それが探しているものです。

基本的に私が探しているのは、元のクエリのすべてまたは基準を満たすリードのリストです。どんな提案も役に立ちます。

+0

コードの書式設定ボタンを使用すると、1000sのスペースよりもはるかに簡単です... – Greg

+0

グレッグ氏に感謝します。あなたの提案は非常に建設的で便利です – jim

答えて

2

エンティティのプロパティを知らなくても、コメントするのは難しいです。

CallDispositionプロパティはCallDispostionCodeプロパティを持っている、あなたはこのような何か行うことができますCallDispositionエンティティの場合:

IList leadList = session.CreateCriteria(typeof(Lead)) 
    .Add(Expression.In("CallDisposition.CallDispostionCode", 
         new string[] {"AC","CC" })).List(); 

それともCallDispositionはIDを持っている場合は、このような何かにあなたの第二の溶液を変更できます。

DetachedCriteria criteria = DetachedCriteria.For<CallDisposition>() 
    .Add(Expression.In("CallDispostionCode", new string[] { "AC", "CC" }) 
    .SetProjection(Projections.Property("CallDisposition.Id")); 

IList leadList = session.CreateCriteria(typeof(EmcLead)) 
    .Add(Subqueries.PropertyIn("CallDisposition.Id", criteria)).List(); 

これは、副選択を使用した1つのデータベースヒットに過ぎません。

+0

2番目のアプローチはちょうど私が探していたものでした.... 。このモンスターは十分に遅いです。 :) – jim

1

ok ...私は望ましい結果を達成しましたが、私はそれを別の方法で行った。

は、最初に私は私がリードするのは正しいとCallDispositionCodeを得ることができるだろうLeadオブジェクトにCallDispositionCodeを保存した場合、この

IList leadList = session.CreateCriteria(typeof(EmcLead)).Add(Expression.In("CallDisposition", DispList)).List(); 

続いこの

IList DispList = session.CreateCriteria(typeof(CallDisposition)).Add(Expression.In("CallDispostionCode", new string[] { "AC", "CC" })).List(); 

をしました。それは設計問題です。

誰かが何か提案や意見があれば、私は聴聞に興味があります。

関連する問題