C# EF查询中如何判断字符串是否存在于List<string>类型参数列表内
解决方案
分两种常用场景实现对应的筛选逻辑:
场景1:精准匹配(Neighborhood字段值完全等于列表中任意一项)
这是最常用的场景,对应SQL的IN查询,把判断逻辑反过来,用入参列表调用Contains方法判断是否包含当前行的字段值即可:
.WhereIf(input.Neighborhoods != null, x => input.Neighborhoods.Contains(x.Neighborhood))
EF/EF Core 会自动将这段逻辑翻译为Neighborhood IN ('xxx','yyy',...)的SQL语句,性能和兼容性都有保证。
如果需要避免传入空列表时出现无意义筛选,可以把判断条件优化为:
.WhereIf(input.Neighborhoods != null && input.Neighborhoods.Any(), x => input.Neighborhoods.Contains(x.Neighborhood))
场景2:模糊匹配(Neighborhood字段值包含列表中任意一项作为子串)
如果你需要的是模糊匹配,只要Neighborhood字段包含列表里任意一个子串就算符合条件,可以这么写:
.WhereIf(input.Neighborhoods?.Any() == true, x => input.Neighborhoods.Any(n => x.Neighborhood.Contains(n)))
内容的提问来源于stack exchange,提问作者Eugene Sukh
相关产品推荐
相关产品推荐

