2010-09-08 8 views
8

Ich habe eine Viele-zu-viele-Beziehung zwischen Konten und PaymentSystems. Ich möchte alle Zahlungssysteme auflisten, die noch keinem Konto zugeordnet sind. Um das zu erreichen, ich versuche, die folgende LINQ to Entities-Abfragen zu verwenden:Wie mache ich eine "Excess" LINQ to Entities Abfrage?

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

Allerdings erhalte ich die folgende Ausnahme bei dem Versuch, die Ergebnisse anzuzeigen: „System.NotSupportedException: Nicht imstande, einen konstanten Wert von zu erstellen Geben Sie 'MyNamespace.Models.PaymentSystem' ein. Nur primitive Typen ('wie Int32, String und Guid') werden in diesem Kontext unterstützt. " Was mache ich falsch? Ich benutze EF4.

UPD: var paymentSystems = pge.PaymentSystems.Wobei (item =>! Item.Accounts.Contains (account)) in derselben Ausnahme auch resultiert.

Antwort

11

Sieht aus wie ich die Lösung gefunden haben:

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

scheint den Trick zu tun.

0

Eine etwas andere Variante der gleichen Antwort:

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