如何在LINQ中使用List<T>集合实现动态条件查询筛选
你可以直接使用LINQ的Contains方法实现和硬编码多OR条件完全一致的效果,该方法会判断目标字段是否存在于给定的列表中,原生支持EF/EF Core等ORM框架自动翻译为SQL的IN语句,执行逻辑和你写的多个||判断完全等效。
你只需要把GetNameTable方法里的Where条件替换为以下写法即可:
private void GetNameTable(List<nUEntity> npA) { var listNPA = npA.Select(x=>x.npAdm).ToList(); var result = (from t1 in table.Where(t => listNPA.Contains(t.namepAdm)) join t2 in provtel on t1.provTel equals t2.provTel orderby t1.namepAdm select new xyEntity { //TODO }).ToList(); }
补充说明
- 如果你使用的是本地对象查询而非数据库查询,该写法同样可以正常运行
- 如果需要兼容
listNPA为空的场景(空列表时不筛选该条件返回所有数据),可以把Where条件调整为:.Where(t => !listNPA.Any() || listNPA.Contains(t.namepAdm))
内容的提问来源于stack exchange,提问作者ingezone
相关产品推荐
相关产品推荐

