次のシナリオがあります。複数の銀行に銀行口座を持つことができる顧客です。この関係は、CustomerクラスのIDictionaryとして記述されます(mapタグを使用してマップされます)。
public class Customer
{
public virtual IDictionary<Bank, string> Banks
{
get { return _Banks; }
set { _Banks = value; }
}
private IDictionary<Bank, string> _Banks = new Dictionary<Bank, string>();
}
IDictionaryの各キーは、顧客がアカウントを持っている銀行を表し、文字列値はこの質問には関係のない単純なステータスです。
私がやりたいのは、指定された銀行に口座を持つすべての顧客を取得するためのNHibernateクエリです。私はこれをBankクラス内で試しました(したがって、このキーワードはBankを参照しています):
IList<Customer> customers = session.QueryOver<Customer>()
.Where(x => x.Banks.Keys.Contains(this))
.List();
そして、上記のクエリを実行しようとするとエラーなしでコンパイルされたとしても、次の例外が発生します。
System.Exception:認識されないメソッド呼び出し:System.Collections.Generic.ICollection`1 [[Finance.Bank、Finance、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null]]:Boolean contains(Finance.Bank)
では、どうすればこの種のクエリを正しく実行できますか?ありがとう!
PS:このSOの質問は、 ISetコレクションに対してそれを行う方法を示しています。このSOの質問は、ICriteriaAPIを使用して私が試みていることは不可能である可能性があることを示しています。