LINQ使用另一个数据库列表过滤数据库列表

时间:2015-12-03 01:07:14

标签: c# entity-framework 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. 所选答案。

  3. 我选择了1.由于使用较少的线条而且是一个更简单的解决方案,结果相同。

1 个答案:

答案 0 :(得分:0)

似乎无法使用currentCitizenships中存储的任何内容创建有效的SQL查询。

首先获取您需要的国家/地区ID列表,然后修改您的查询以在简单的整数集合(或任何Contains)上使用CountryId

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

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