EF Core中LINQ使用List.Contains查询无结果的用法确认
问题分析与解决方案
你的代码里的Where(e => e.Id.Contains(ids.ToString()))写法完全错误,这是导致功能失效的核心原因:
ids是List<string>类型,调用ToString()后得到的不是ID列表的拼接字符串,而是该集合的类型名称(类似System.Collections.Generic.List1[System.String]),用这个字符串去匹配e.Id`,自然找不到任何符合条件的记录。- 你实际想要的是筛选出
Id存在于ids列表中的数据,正确的写法应该是反过来,用列表的Contains方法判断e.Id是否在列表内:
var spr = this.contextSQL.ProductSubProductRate .Where(e => ids.Contains(e.Id));
EF会自动将这个表达式转换成SQL的IN查询(比如WHERE Id IN ('id1','id2',...)),这才是批量筛选的正确方式。
另外补充两点优化建议:
- 避免直接用
SqlQuery获取当前时间,EF Core可以用DateTime.UtcNow或DateTime.Now(根据数据库时区配置调整),或者用数据库函数,比如EF Core 3.0+可以用EF.Functions.Now()。 - 如果
ids为空,建议提前判断,避免执行无意义的查询。
内容的提问来源于stack exchange,提问作者Vincent Krisna
相关产品推荐
相关产品推荐

