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
相关产品推荐
相关产品推荐

