2010-09-08 9 views
8

Tengo una relación muchos a muchos entre cuentas y sistemas de pago. Quiero enumerar todos los PaymentSystems aún no asignados a una cuenta. Para lograr eso, yo estoy tratando de utilizar el siguiente LINQ a Entidades consultas:¿Cómo hago una consulta LINQ "Excepto" a Entidades?

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

Sin embargo, tengo la siguiente excepción cuando se trata de mostrar los resultados: "System.NotSupportedException: No se puede crear un valor constante de tipo 'MyNamespace.Models.PaymentSystem'. Solo los tipos primitivos ('como Int32, String y Guid') son compatibles en este contexto. " ¿Qué estoy haciendo mal? Estoy usando EF4.

UPD: var paymentSystems = pge.PaymentSystems.Where (item =>! Item.Accounts.Contains (account)) da como resultado la misma excepción también.

Respuesta

11

Parece que he encontrado la solución:

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

parece hacer el truco.

0

A ligeramente diferente variante de la misma respuesta:

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