如何在C# LINQ查询中整合条件判断实现一行代码逻辑?
如何将条件判断整合到LINQ查询中实现逻辑?
你期望的那种在链式调用中间插入if块的写法在C#里是语法不合法的,编译会报错。不过有两种更规范的方式实现你的需求:
方式一:在Where子句中合并条件(一行代码实现)
直接把userId的判断整合到Where的条件里,当userId为0时不做过滤,不为0时才执行用户关联检查:
var sites = context.SITES.OrderBy(s => s.NAME) .Where(s => userId == 0 || s.Users.Any(x => x.ID == userId)) .ToList();
方式二:分步构建查询(更高效推荐)
先初始化基础的排序查询,再根据条件动态添加Where过滤,最后统一执行ToList(),这种方式避免了重复执行OrderBy操作,性能更优:
var query = context.SITES.OrderBy(s => s.NAME); if (userId != 0) { query = query.Where(s => s.Users.Any(x => x.ID == userId)); } var sites = query.ToList();
这两种方式都能替代你原来的重复查询逻辑,实现根据userId是否为0来决定是否过滤站点的需求。
内容的提问来源于stack exchange,提问作者Stefano Cesano
相关产品推荐
相关产品推荐

