LINQ技巧:输入参数为Null时如何排除CONTAINS谓词条件?
修正后的LINQ查询实现
首先修正原代码中的关键错误,并实现"参数为Null时忽略对应条件"的逻辑:
// 假设input是包含Key和Value属性的查询参数对象 query.Where(card => card.Attributes.Any(attribute => // 首先判断属性是否可搜索(注意原定义中Searchable是string类型,需匹配字符串"true") attribute.Searchable == "true" // 当input.Key不为Null时,检查Key是否包含输入值;Null时跳过该条件 && (input.Key == null || attribute.Key.Contains(input.Key)) // Value条件逻辑与Key完全一致 && (input.Value == null || attribute.Value.Contains(input.Value)) ));
核心逻辑说明
- 修正赋值错误:原代码中
attribute.Searchable = true是赋值操作,改为判断相等的attribute.Searchable == "true"(如果你的Searchable实际是bool类型,直接写attribute.Searchable即可)。 - 条件组合规则:用
&&串联所有必要条件,确保只有同时满足"可搜索" + "符合非Null的输入参数条件"的属性才会被匹配。 - Null参数处理:采用
(参数为Null || 条件成立)的模式,当输入参数为Null时,该分支直接返回true,相当于忽略此条件;参数非Null时才会执行后续的Contains检查。
可选优化
如果需要忽略大小写的匹配,可以给Contains方法传入字符串比较参数:
attribute.Key.Contains(input.Key, StringComparison.OrdinalIgnoreCase)
内容的提问来源于stack exchange,提问作者napfernandes
相关产品推荐
相关产品推荐

