Linq where 三元和括号
Linq where with ternary and brackets
我有以下查询:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase)
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
现在我希望这 return 所有邮政编码都匹配国家和术语,但出于某种原因,它只匹配术语,如果国家为空,然后如果国家不为空,它忽略字词,正好匹配国家/地区。
如果我把三元括起来:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
(string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase))
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
然后它就如我所料的那样工作了。为什么额外的一对括号会有所不同,因为代码分析总是抱怨我把括号放在三元组周围?
在 C# 中,三元运算符的优先级低于条件 AND 运算符。因此,在三元运算符之前没有括号 AND 评估,并且您有检查邮政编码和国家/地区的三元运算符。 IE。默认
( checkPostcode && countryNotNull) ? true : checkCountry
当您添加括号时,您拆分了通过邮政编码检查国家/地区的三元运算符
checkPostcode && (countryNotNull ? true : checkCountry)
我有以下查询:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase)
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
现在我希望这 return 所有邮政编码都匹配国家和术语,但出于某种原因,它只匹配术语,如果国家为空,然后如果国家不为空,它忽略字词,正好匹配国家/地区。
如果我把三元括起来:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
(string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase))
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
然后它就如我所料的那样工作了。为什么额外的一对括号会有所不同,因为代码分析总是抱怨我把括号放在三元组周围?
在 C# 中,三元运算符的优先级低于条件 AND 运算符。因此,在三元运算符之前没有括号 AND 评估,并且您有检查邮政编码和国家/地区的三元运算符。 IE。默认
( checkPostcode && countryNotNull) ? true : checkCountry
当您添加括号时,您拆分了通过邮政编码检查国家/地区的三元运算符
checkPostcode && (countryNotNull ? true : checkCountry)