如何在.Where()函数中使用内联if条件替代IF-Else,避免列表空值报错
你可以直接在LINQ的条件中新增集合空校验逻辑,内联写法如下:
q = q.Where(s => (matchingRecords == null || !matchingRecords.Any() || !matchingRecords.Contains(s.Id)) || (s.SecId != null) );
逻辑说明
- 新增的
matchingRecords == null || !matchingRecords.Any()判断命中时(即集合为null或无元素),整个左半部分条件直接成立,相当于跳过Contains校验逻辑 - 只有当
matchingRecords非空且包含元素时,才会执行后续的!matchingRecords.Contains(s.Id)判断 - 原有
|| (s.SecId != null)的业务逻辑完全保留,不会改动原有规则
如果你的查询是作用于EF Core等ORM的IQueryable对象,担心部分数据库提供程序无法翻译集合的Any()判断,可以用更兼容的简化写法,空判断逻辑不变:
q = q.Where(s => (matchingRecords?.Any() != true || !matchingRecords.Contains(s.Id)) || s.SecId != null );
matchingRecords?.Any() != true同时覆盖了集合为null、集合无元素两种场景,写法更简洁。
内容的提问来源于stack exchange,提问作者Fanny Hunayn
相关产品推荐
相关产品推荐

