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

System.Linq.Dynamic.Core中子属性投影的正确语法咨询

解决方案:动态LINQ嵌套对象投影的正确语法

在System.Linq.Dynamic.Core v1.2.24中,要实现嵌套对象的部分投影,需要明确指定子属性的来源路径,并使用正确的对象构造/初始化语法,以下是两种可行方案:

方案1:使用构造函数(需Address类有匹配的构造函数)

如果你的Address类定义了接收Id和City作为参数的构造函数,可使用以下动态LINQ字符串:

var dynamicQuery = "new Person(Id, FirstName, Address = new Address(Address.Id, Address.City))";
var projectedPeople = people.Select(dynamicQuery).ToList();
  • 关键:必须通过Address.Id、Address.City明确引用源对象的子属性,避免动态LINQ误将Id、City解析为Person类的属性。
  • 使用Address = ...为Person的Address属性赋值新构造的Address对象。

方案2:使用对象初始化器(无构造函数依赖)

如果Address类没有匹配的构造函数,推荐使用对象初始化器语法,兼容性更强:

var dynamicQuery = "new Person { Id = Id, FirstName = FirstName, Address = new Address { Id = Address.Id, City = Address.City } }";
var projectedPeople = people.Select(dynamicQuery).ToList();

这种语法完全对应你期望的C#硬编码投影逻辑,无需依赖类的构造函数定义。

注意事项

  • 若Address类位于特定命名空间下,动态LINQ无法自动识别时,需在字符串中指定完整类型名(例如new YourNamespace.Address { ... })。
  • 确保动态LINQ的上下文能访问到Person和Address类型(可通过using命名空间或注册类型解决)。

内容的提问来源于stack exchange,提问作者Colin Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:40:26