2010-09-08 13 views
8

Ho una relazione molti-a-molti tra Account e PaymentSystems. Voglio elencare tutti i sistemi di pagamento non ancora assegnati a un account. A tal fine, sto cercando di utilizzare la seguente query LINQ to Entities:Come si effettua una query "Eccetto" LINQ alle entità?

PaymentGatewayEntities pge = new PaymentGatewayEntities(); 
Account account = pge.Accounts.Single(item => item.id == accountId); 
var paymentSystems = pge.PaymentSystems.Except(account.PaymentSystems); 

Tuttavia, ottengo la seguente eccezione quando si cerca di visualizzare i risultati: "System.NotSupportedException: impossibile creare un valore costante di digitare "MyNamespace.Models.PaymentSystem". Solo i tipi primitivi ('come Int32, String e Guid') sono supportati in questo contesto. " Che cosa sto facendo di sbagliato? Sto usando EF4.

UPD: var paymentSystems = pge.PaymentSystems.Where (item =>! Item.Accounts.Contains (account)) restituisce la stessa eccezione.

risposta

11

Sembra che ho trovato la soluzione:

var paymentSystems = pge.PaymentSystems.Where(
    item => !item.Accounts.Any(t => t.id == accountId)); 

sembra fare il trucco.

0

Un leggermente diversa variante della stessa risposta:

var paymentSystems = pge.PaymentSystems.Where(
    item => item.Accounts.All(t => t.accountId != t.ID)); 
Problemi correlati