質問

Nhibernate Criteriaを使用して、IN()の逆バージョンとしてしか説明できないことを実行しようとしています。

プロパティに保存されている値がリスト/コレクションXにあると言うよりも

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

どのような助けでも感謝しますが、これが意味をなさない場合は、より良い説明を試みることができます。

編集申し訳ありませんが、これは十分な意味をなさないことがわかります...

システムにイベントアイテムがあり、それが適用されるオーディエンス(アイテム)のリストを持つことができます。管理者がオーディエンスアイテムを削除する場合は、そのアイテムがイベントによって参照されていないことを確認します。 (AudienceListは、オーディエンスのIDの文字列リストとして保存されます。)

私が考えていたのは、次のようなものでした:

var results = SessionInstance.Session.CreateCriteria(typeof(EventItem.Items.EventItem)).Add(Restrictions.In(" AudienceList&quot ;, myAudience.ID)) .List();

しかし、AudienceListとmyAudience.IDを逆にする必要がありますか?オーディエンスIDは持っていますが、他のIDのリストに含まれている可能性があることを確認する必要があります。

ありがとうございます。

編集2

EventItemの定義では、そのプロパティの1つがオーディエンスIDのDetailCollectionであり、IDの文字列リストとしてDBに保存されます。

役に立ちましたか?

解決

編集:以前の回答を破棄しました。

まあ、ここには本当の関係モデルが存在しないように思えるので、物事はそれほどきれいではありません。外部キーなどがなければ、この状況でNHibernateが多く使用されるかどうかはわかりません(少なくとも素敵なクエリを生成するために)。

単一のイベントレコードのすべてのオーディエンスIDが単一のフィールドに保存されている場合、SQL LIKEを使用するか、コードで実行する必要があります。すべてのEventItemを取得し、それらを反復処理して、探しているIDのAudienceListコレクションを確認します。その方法を採用する場合は、移動するデータの量を最小限に抑えるためにDTOを作成するのが最善かもしれません。次のようなもの

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

これは、「このオーディエンスタイプはまだ使用中です」ということをユーザーに通知するだけでよいと仮定しています。特定のインスタンスを指摘しないでください。それ以外の場合は、さらにデータを追加する必要があります。

他のヒント

このような意味ですか?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top