2010-09-08 32 views
8

Tôi có mối quan hệ nhiều-nhiều giữa Tài khoản và Hệ thống thanh toán. Tôi muốn liệt kê tất cả các hệ thống thanh toán chưa được chỉ định cho một tài khoản. Để đạt được điều đó, tôi đang cố gắng để sử dụng LINQ to Entities sau truy vấn:Làm cách nào để tạo truy vấn LINQ to Entities "Ngoại trừ"?

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

Tuy nhiên, tôi nhận được ngoại lệ sau khi cố gắng để hiển thị các kết quả: "System.NotSupportedException: Không thể để tạo ra một giá trị không đổi của gõ 'MyNamespace.Models.PaymentSystem'. Chỉ có các kiểu nguyên thủy ('như Int32, String, và Guid') được hỗ trợ trong ngữ cảnh này. " Tôi đang làm gì sai? Tôi đang sử dụng EF4.

UPD: var paymentSystems = pge.PaymentSystems.Where (item =>! Item.Accounts.Contains (tài khoản)) cũng dẫn đến cùng một ngoại lệ.

Trả lời

11

Hình như tôi đã tìm thấy các giải pháp:

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

dường như làm các trick.

0

Một biến thể hơi khác của cùng một câu trả lời:

var paymentSystems = pge.PaymentSystems.Where(
    item => item.Accounts.All(t => t.accountId != t.ID)); 
Các vấn đề liên quan