2015-12-03 103 views
1

我試圖找到這個答案。LINQ過濾一個數據庫列表與另一個數據庫列表

我正在使用LINQ並嘗試使用另一個列表過濾數據庫列表,以從成員已經是公民的國家/地區列表中刪除國家/地區。

var currentCitizenships = DbContext.Citizenships 
      .Where(c => c.MemberId == CurrentUser.MemberId) 
      .Include(c => c.Country) 
      .ToList(); 

var filtered = DbContext.Countries 
      .Where(c => !currentCitizenships.Any(current => current.Country.CountryId == c.CountryId)); 

我得到一個Not supported exception以下消息:

Unable to create a constant value of type 'Project.EntityFramework.Models.Citizenship'. Only primitive types or enumeration types are supported in this context.

兩個解決方案部

  1. 刪除第一個查詢的ToList()。

  2. 選定的答案。

我選擇了1.由於使用較少的行,並且是一個簡單的解決方案,具有相同的結果。

+0

是第一個引發該異常的查詢,還是第二個? –

+0

第二個查詢拋出異常。如果有辦法做到這一點,我不反對將查詢結合起來。 –

+2

嘗試從第一個查詢中移除.ToList()。 – Harsh

回答

0

它似乎無法使用存儲在currentCitizenships中的任何內容創建有效的SQL查詢。

獲取您需要的國家/地區編號的列表,然後修改您的查詢以使用簡單的整數集合(或任何CountryId)代替Contains

var countryIds = currentCitizenships.Select(x => x.Country.CountryId).ToList(); 

var filtered = DbContext.Countries.Where(c => !countryIds.Contains(c.CountryId)); 
相關問題