You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#用Dynamic Linq查询嵌套对象集合时触发Value cannot be null错误

异常触发原因

堆栈信息显示异常出现在System.Linq.Expressions.Expression.Bind方法执行时,该方法要求传入的成员赋值表达式不能为空,触发空参数异常的具体原因有3个:

  • 属性名大小写不匹配:Dynamic Linq解析时严格区分大小写,你代码中写的firstname、lastname、email与实体类定义的FirstName、LastName、Email命名不一致,解析器无法找到对应成员,返回空表达式。
  • 嵌套集合投影语法不完整:对UserAddresses这类集合做Select投影时,Dynamic Linq要求明确指定集合元素的临时参数名,你直接写Select(new ...)省略了lambda参数部分,解析器无法生成正确的集合投影表达式,返回空值。
  • 泛型参数与投影目标类型不匹配:你调用Select方法时传入的泛型参数是Domain.UserManagement,但实际要投影的目标类型是Domain.UserManagement.Users.User,类型不匹配导致成员绑定失败。
正确实现方案

修正投影语句的语法、属性名和类型参数即可正常执行,示例代码如下:

// 源为IQueryable<User>类型的查询
var result = query.Select<Domain.UserManagement.Users.User>(
    @"new Domain.UserManagement.Users.User
    { 
        Id, 
        FirstName, 
        LastName, 
        Email, 
        UserAddresses.Select(ua => new Domain.UserManagement.UserAddresses.UserAddress{ Country }) as UserAddresses 
    }"
).ToDynamicArray();

补充注意事项

  • 如果嵌套集合可能为空,可以在投影前加空判断,避免运行时空引用异常:UserAddresses == null ? null : UserAddresses.Select(ua => new UserAddress{ Country })
  • 如果用EF Core等ORM执行该查询,无需额外配置即可正常转译为SQL,只会查询你指定的列,不会加载多余字段。

内容的提问来源于stack exchange,提问作者Peter Siegel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:45:03