ho qualche codice che è in grado di recuperare tutte le entità che contengono un particolare rapporto, in questo modo:Come faccio a filtrare le entità che NON sono in una relazione molti-a-molti utilizzando LLBLGen Pro?
var bucket = new RelationPredicateBucket();
bucket.Relations.Add(MessageEntity.Relations.MessageTemplateReferenceEntityUsingMessageId);
var messageEntities = new EntityCollection<MessageEntity>();
using (var myAdapter = PersistenceLayer.GetDataAccessAdapter())
{
myAdapter.FetchEntityCollection(messageEntities, bucket);
}
funziona alla grande. Ora, voglio ottenere tutte le entità nella tabella dei messaggi che NON hanno una riga corrispondente nella tabella xref di MessageTemplate. Ovvero, dove MessageEntity.Relations.MessageTemplateReferenceEntityUsingMessageId è null/false/inesistente.
Ecco un hack fenomenale che uno dei miei compagni di squadra hanno fatto per fare questo lavoro alcuni anni fa (collezione entità del codice di cui sopra è in templatedMessages sottostante):
bucket.PredicateExpression.Add(MessageFields.Id
!= templatedMessages.Select(m =>
m.Id).ToArray());
Questo in realtà ha funzionato, fino a poco tempo quando il numero di templatedMessages nella tabella è cresciuto oltre 2100 e il metodo ha iniziato a generare queste eccezioni:
Il flusso di protocollo RPC (Remote Procedure Call) della trasmissione remota di dati tabulari (TDS) non è corretto. Troppi parametri sono stati forniti in questa richiesta RPC. Il massimo è 2100.
Ovviamente, passando SQL un elenco completo di ID che dovrebbe evitare non è terribilmente efficiente. Qual è il modo migliore per farlo in LLBLGen? In SQL vorrei fare qualcosa di simile:
SELECT m.* FROM Message m
WHERE NOT EXISTS (SELECT 1 FROM MessageTemplate mt WHERE mt.MessageID = m.ID)
Posso farlo in LLBLGen?