.NET Core+EF技术问题:如何根据匹配ID筛选表中记录
修正后的EF查询语句
错误原因是你把Contains的调用对象搞反了:c.MsgId是单个long?类型的值,没有Contains方法;你需要检查的是集合mymsgIds是否包含当前记录的MsgId。
基础修正代码
var result = await _dbContext.MyTable.Where(c => mymsgIds.Contains(c.MsgId)).ToListAsync();
额外注意事项
- 空集合处理:如果
mymsgIds可能为null,先做判空避免空引用异常:
var msgIds = mymsgIds ?? Enumerable.Empty<long?>(); var result = await _dbContext.MyTable.Where(c => msgIds.Contains(c.MsgId)).ToListAsync();
- 性能优化:将
IEnumerable<long?>转换为List<long?>或HashSet<long?>,EF Core能更高效地生成SQL查询:
var msgIdSet = mymsgIds?.ToHashSet() ?? new HashSet<long?>(); var result = await _dbContext.MyTable.Where(c => msgIdSet.Contains(c.MsgId)).ToListAsync();
- 空值匹配:如果
mymsgIds包含null,EF会自动匹配表中MsgId为null的记录(前提是表的MsgId字段允许为空)。
内容的提问来源于stack exchange,提问作者jubi
相关产品推荐
相关产品推荐

