如何在Dynamic Linq语法中筛选动态字段值不为Null的记录?
问题描述
需要根据动态选择的文化字段(Name_culture参数值可能为name_en、name_it等),筛选出对应字段值不为Null的记录。
使用固定字段的Linq查询可以正常工作:
.Where(i => i.name_it != null)
但使用Dynamic Linq的以下写法会报错:
.Where($"{Name_culture} != @0", null)
错误信息:
System.Linq.Dynamic.ParseExceptionNo property or field '0' exists in type 'ISO3166'
请问如何在Dynamic Linq语法中实现字符串与Null的比较?
解决方法
在Dynamic Linq里直接把null写进查询字符串即可,不需要通过@0传参。正确代码如下:
.Where($"{Name_culture} != null")
如果需要同时过滤掉空字符串(即字段值既不为Null也不为空),可以扩展为:
.Where($"{Name_culture} != null && {Name_culture} != \"\"")
报错原因说明
你之前的写法错误在于:Dynamic Linq会把@0解析为目标类型(ISO3166)的属性/字段名,而非参数占位符。因为你的类型里没有名为0的成员,所以抛出了解析异常。直接在查询表达式中使用null关键字是Dynamic Linq原生支持的语法,无需额外传递参数。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

