LINQ使用另一个数据库列表筛选数据库列表

本文关键字:数据库 列表 筛选 另一个 LINQ | 更新日期: 2023-09-27 18:25:22

我试图找到这个问题的答案。

我正在使用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。由于使用较少的线路,并且是具有相同结果的更简单的解决方案。

LINQ使用另一个数据库列表筛选数据库列表

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

首先获取所需的国家/地区id列表,然后修改查询,在简单的整数集合上使用Contains(或者CountryId是什么)。

var countryIds = currentCitizenships.Select(x => x.Country.CountryId).ToList();
var filtered = DbContext.Countries.Where(c => !countryIds.Contains(c.CountryId));