Domanda

Sto cercando di eseguire quella che posso solo descrivere come la versione inversa di IN () usando i Nhibernate Criteria ..

Anziché dire che il valore memorizzato nella proprietà è nell'elenco / raccolta X

Voglio dire, questo valore X (un ID) è nell'elenco che è una proprietà dell'oggetto.

Qualsiasi aiuto apprezzato, posso provare a spiegare meglio se questo non ha senso.

EDIT Chiedo scusa alle persone, come ho capito, non ha abbastanza senso ...

Ho un elemento Evento nel mio sistema che può avere un elenco di Pubblico (articoli) a cui si applica. Se l'amministratore desidera eliminare un elemento Pubblico, desidero verificare che l'elemento non sia referenziato da alcun evento. (L'AudienceList è memorizzato come un elenco di stringhe di ID per il pubblico).

Quello che stavo pensando era qualcosa del tipo:

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

Ma ho bisogno che AudienceList e myAudience.ID siano al contrario, no? Ho l'ID pubblico ma devo verificare che potrebbe essere in un elenco di altri ID.

Grazie ancora.

EDIT 2

La definizione di EventItem è tale che una delle sue proprietà è un DetailCollection degli ID destinatario, che vengono salvati nel DB come un elenco di stringhe di ID.

È stato utile?

Soluzione

EDIT: ho eliminato la mia risposta precedente.

Beh, sembra che non ci sia un vero modello relazionale qui, quindi le cose non saranno così belle. Senza chiavi esterne e simili, non sono sicuro che NHibernate sarà molto utile in questa situazione (almeno per generare una bella query).

Se tutti gli ID destinatario per un singolo record di evento sono memorizzati in un singolo campo, dovrai utilizzare un LIKE SQL o farlo nel codice. Recupera tutti gli EventItem e esegui l'iterazione, controllando le loro raccolte AudienceList per l'ID che stai cercando. Se segui questa strada, potrebbe essere meglio creare un DTO per ridurre al minimo la quantità di dati che ti sposti. Qualcosa come

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

Questo presuppone che tu debba solo informare l'utente che " questo tipo di pubblico è ancora in uso " e non indicare casi specifici. Altrimenti dovrai aggiungere più dati.

Altri suggerimenti

Intendi qualcosa del genere?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top