2009-04-29 7 views
2

私はNHibernateの基準を使用して)私はIN(の逆バージョンとして記述することができるものを実行しようとしています。..NHibernate:in()の逆バージョンですか?

ではなくプロパティに格納された値がリスト/コレクションX

であると言って私は、この値X(ID)がオブジェクトのプロパティであるリストにあると言っています。

これが意味をなさない場合は、何か助けていただければ幸いです。

EDIT人に謝罪、私は、これは十分意味がありません理解して...

私はそれが適用される対象者のリストを持つことができます私のシステムでイベントアイテム(アイテム)を持っています。管理者がオーディエンスアイテムを削除したい場合は、そのアイテムがどのイベントでも参照されていないことを確認したいと思います。 (AudienceListは、オーディエンスのIDの文字列リストとして格納されます)。

VAR結果= SessionInstance.Session.CreateCriteria(typeof演算(EventItem.Items.EventItem)).Add(Restrictions.In( "AudienceList"、myAudience:私は考えていた何

はの線に沿って何かでした。 ID)) .List();

しかし、私はAudienceListとmyAudience.IDが必要です。私は視聴者IDを持っていますが、それが他のIDのリストに含まれている可能性があることを確認する必要があります。

もう一度おねがいします。

EDIT 2

EventItemの定義は、それの一つがオーディエンスIDのDetailCollectionあり、それらはIDの文字列リストとしてDBに保存されているプロパティだようなものです。

+0

私は、リスト内の特定の項目にプロパティIDが指定された値を持っているかどうかを確認する方法を尋ねていると思いますが、答えを出す前にもっと明確にすることができます。 –

+0

ああ、私はN2が関与したことを知らなかった。あなたの関係構造はちょっと奇妙に思えます - いくつかのテーブル定義とマッピングファイルの抜粋を見るチャンス? –

答えて

2

EDIT:スクラップした前回の回答。

ここには本当のリレーショナルモデルがないように聞こえますが、物事はきれいではありません。外部キーなどがなければ、NHibernateがこのような状況で(少なくとも良いクエリを生成するために)大いに使用されるかどうかはわかりません。

単一のイベントレコードのすべてのオーディエンスIDが1つのフィールドに格納されている場合は、SQL LIKEを使用するか、コードで実行する必要があります。すべてのEventItemを取得して繰り返し、AudienceListコレクションで探しているIDを確認します。そのルートを使用する場合は、移動するデータの量を最小限に抑えるためにDTOを作成することが最善の方法です。あなただけの「この観客の種類が使用中である」と特定のインスタンスを指摘ないことをユーザに通知する必要があると仮定しています

session.CreateQuery("select new AudienceListDTO(e.AudienceList) from EventItems e").List(); 

ような何か。それ以外の場合は、さらにデータを追加する必要があります。

+0

ねえ、どういう用語が残念なのかよく分かりません。すべてが私がNHibernate(N2 CMS)の上で使用しているフレームワークによって保存されています。アイテムテーブルに格納されているオブジェクトと、詳細テーブルのオブジェクトの詳細。 私の場合、視聴者(子供、大人など)を持つことができるイベントがあります。視聴者アイテムを削除しようとするときに、視聴者がイベントによって参照されていないことをチェックしたいと思っています。 – peteski

+0

私の答えが間違っているとはかなり確信しています。私はそれを更新しますが、まずEventItemのクラス定義を明確にすることができますか? AudienceListのリストはですか、リストですか、それとも単に文字列ですか(カンマ区切りか? –

+0

お返事ありがとう!私はそれを撃つだろう。別の関係があるべきですか?私はむしろそれを正しい方向に進めていくつもりです。 ありがとう Pete – peteski

0

このような意味ですか?

class YourClass { 
    List<int> theList; 
} 

IQueryable<YourClass> query = ...; 
var result = from c in query where c.theList.Contains(value); 
関連する問題