无法检查int型列表是否完全包含在另一个int型列表中



我有一个表示服务id的int列表。我要确保所有这些id都存在于数据库中。换句话说,我想扫描id列表和服务表,以确保所有这些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。除了这个

如果你有两个项目序列,并且你做了除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,并对它们进行计数。

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;

最新更新