无法检查一个 int 列表是否完全包含在另一个 int 列表中
Unable to check if a list of int is completely contained in another int list
我有一个代表服务 ID 的整数列表。我想确保所有这些 ID 都存在于数据库中。
换句话说,我想扫描 ID 列表和 table 服务,以确保所有这些 ID 都存在于数据库中。
我试过了:
List<int> ids;//[1,52]
var x = _context.Services.Any(s => ids.Contains(s.Id));//service ids = [1,2,3]
但它返回了 True
,这不是所需的输出。
我也这样试过:
_context.Services.Any(s => ids.Any(id => id == s.Id)!=null);
这样
_context.Services.Any(s => ids.Any(id => id == s.Id)!=null);
也没有运气。正确的方法是什么?我正在使用 EFCore 3.1.8
通常您会为此使用 Queryable.Except。
如果你有两个项目序列,并且除了 B 之外你还做了 A,那么如果你什么都没有了,那么显然 A 中的每个项目也是 B 中的项目。
IEnumerable<int> requiredIds = ...
IQueryable<int> serviceIds = dbContext.Services.Select(service => service.Id);
bool someRequiredIdsMissing = requiredIds.Except(serviceIds).Any();
唉,你的A在本地,你的B在数据库。所以我想这行不通。
您可以做的是仅保留所需 ID 列表中的服务 ID,并对它们进行计数。如果更少,那么显然有些 requiredIds 不在 serviceIds 中。
var requiredServiceIds = serviceIds.Where(serviceId => requiredIds.Contains(serviceId);
bool allRequiredAvailale = requiredServiceIds.Count() != requiredIds.Count();
示例:
IEnumerable<int> requiredIds = new [] {1, 2, 7, 20};
Total: 4 elements
Your service Ids are: 1 2 4 5 8 20 25
requiredServiceIds : 1 2 20: total 3 elements
So allRequiredAvailale is false;
示例 2:
Your service Ids are: 1 2 4 5 7 8 20 25
requiredServiceIds : 1 2 7 20: total 4 elements
So allRequiredAvailale is true;
我有一个代表服务 ID 的整数列表。我想确保所有这些 ID 都存在于数据库中。 换句话说,我想扫描 ID 列表和 table 服务,以确保所有这些 ID 都存在于数据库中。
我试过了:
List<int> ids;//[1,52]
var x = _context.Services.Any(s => ids.Contains(s.Id));//service ids = [1,2,3]
但它返回了 True
,这不是所需的输出。
我也这样试过:
_context.Services.Any(s => ids.Any(id => id == s.Id)!=null);
这样
_context.Services.Any(s => ids.Any(id => id == s.Id)!=null);
也没有运气。正确的方法是什么?我正在使用 EFCore 3.1.8
通常您会为此使用 Queryable.Except。
如果你有两个项目序列,并且除了 B 之外你还做了 A,那么如果你什么都没有了,那么显然 A 中的每个项目也是 B 中的项目。
IEnumerable<int> requiredIds = ...
IQueryable<int> serviceIds = dbContext.Services.Select(service => service.Id);
bool someRequiredIdsMissing = requiredIds.Except(serviceIds).Any();
唉,你的A在本地,你的B在数据库。所以我想这行不通。
您可以做的是仅保留所需 ID 列表中的服务 ID,并对它们进行计数。如果更少,那么显然有些 requiredIds 不在 serviceIds 中。
var requiredServiceIds = serviceIds.Where(serviceId => requiredIds.Contains(serviceId);
bool allRequiredAvailale = requiredServiceIds.Count() != requiredIds.Count();
示例:
IEnumerable<int> requiredIds = new [] {1, 2, 7, 20};
Total: 4 elements
Your service Ids are: 1 2 4 5 8 20 25
requiredServiceIds : 1 2 20: total 3 elements
So allRequiredAvailale is false;
示例 2:
Your service Ids are: 1 2 4 5 7 8 20 25
requiredServiceIds : 1 2 7 20: total 4 elements
So allRequiredAvailale is true;