Frage

Ich versuche, auszuführen, was ich nur als Rückwärts Version von IN () unter Verwendung der Nhibernate Kriterien beschreiben kann ..

Anstatt der Wert in der Eigenschaft gespeichert sagen will, ist in der Liste / Sammlung X

ich sagen will, ist dieser Wert X (eine ID) in der Liste, die eine Eigenschaft des Objekts ist.

Jede Hilfe dankbar, ich kann versuchen, es besser zu erklären, wenn dies keinen Sinn macht.

EDIT Apologies zu Menschen, wie ich sie verstehe das nicht genug Sinn macht ...

Ich habe ein Event-Element in meinem System, das eine Liste der Zielgruppe (Artikel) haben können, die sie gilt. Wenn der Server-Betreiber will ein Publikum Inhalt löschen möchte ich überprüfen, ob das Element nicht durch irgendwelche Ereignisse verwiesen wird. (Der AudienceList als String Liste des IDs für Audienzen gespeichert ist).

Was ich dachte, war etwas entlang der Linien von:

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

Aber ich brauche den AudienceList und myAudience.ID die andere Art und Weise zu sein um nicht wahr? Ich habe das Publikum ID sondern muß prüfen, ob sie in einer Liste von anderer ids sein könnten.

Vielen Dank noch einmal.

EDIT 2

Die Definition des EventItem ist so, dass eine seiner Eigenschaften ist ein DetailCollection von Audience-IDs, werden sie an die DB als String Liste von IDs gespeichert.

War es hilfreich?

Lösung

EDIT:. Verschrottet meine Antwort

Nun, es klingt wie es hier nicht um ein echtes relationales Modell ist so die Dinge nicht so schön sein. Ohne Fremdschlüssel und dergleichen, ich bin nicht sicher, dass NHibernate viel Einsatz in dieser Situation sein wird (zumindest eine schöne Abfrage zu erzeugen).

Wenn alle des Audience-IDs für eine einzelne Ereignisaufzeichnung in einem einzelnen Feld gespeichert sind, werden Sie entweder ein SQL LIKE verwenden oder in Code zu tun. Holt alle EventItems und durchlaufen sie die Überprüfung ihrer AudienceList Kollektionen für die ID Sie suchen. Wenn Sie diesen Weg gehen, könnte es am besten sein, ein DTO zu erstellen, um die Menge an Daten, die Sie bewegen, zu minimieren. So etwas wie

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

Das ist vorausgesetzt, Sie müssen nur den Benutzer darüber informieren, dass „diese Art Publikum noch im Einsatz ist“ und nicht bestimmte Instanzen hinweisen. Ansonsten werden Sie müssen mehr Daten hinzufügen.

Andere Tipps

Meinst du so etwas?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top