使用Dynamic LINQ在Select中用三元运算符处理Sum空引用异常
Dynamic LINQ 中对可能为 null 的集合属性求和的解决方案
你提到的
queryable.Select("new (Sum(collection == null ? 0 : collection.Count) as Total)")写法是可行的,只要你的Dynamic LINQ版本支持三元运算符(?:)。这个表达式能正确处理每个元素的collection为null的情况:为空时取0,否则取collection.Count,再对所有元素的该值求和,最终返回名为Total的结果。之前使用
np(Contestants.Count, 0)抛出空引用异常,大概率是因为np并非Dynamic LINQ内置的空安全处理方法——当Contestants为null时,访问Contestants.Count会直接触发空引用异常,np方法根本没机会拦截这个错误。补充一种可选写法:如果你的Dynamic LINQ版本支持C#的空传播运算符(
?.),也可以简化成:queryable.Select("new (Sum(collection?.Count ?? 0) as Total)")这个写法和三元运算符逻辑等价,可读性更高。
注意事项:
- 确保
collection是查询序列中每个元素的可访问属性,属性名拼写完全匹配; - 如果你的Dynamic LINQ版本较老不支持三元运算符或空传播,需要升级库版本,或者改用自定义扩展方法处理空集合的Count计算,再在Dynamic LINQ中注册该方法后调用。
- 确保
内容的提问来源于stack exchange,提问作者PontiacGTX
相关产品推荐
相关产品推荐

