我有一些 Linq to Entities 代码,可以从商店中提取数据并从中创建 DTO 集合......
List<VRTSystemOverview> systems = query.OrderBy(s => s.DHRNumber)
.Select(s => new VRTSystemOverview {
ID = s.ID,
SystemNumber = s.SystemNumber
// other properties removed for clarity...
})
.ToList();
查询是基于当前上下文的非枚举查询,应用了一些过滤。
现在,我想向这个 DTO 添加一个新属性,它是一个以竖线分隔的字符串,由来自原始系统对象的子属性的代码组成。这将用于在客户端上进行过滤。
导航工作如下,每个系统都有一个产品配置,每个产品配置都有多个价格手册条目,每个条目都有一个代码。因此,我认为我应该能够做到以下几点......
List<VRTSystemOverview> systems = vrtSystemsBasicQuery.OrderBy(s => s.DHRNumber)
.Select(s => new VRTSystemOverview {
ID = s.ID,
SystemNumber = s.SystemNumber,
PriceBookCodes = s.ProductConfiguration
.ProductConfigurations_PriceBook
.Select(pb => pb.PriceBook.ProductCode)
.Aggregate("", (s1, a) => s1 += "|" + a)
})
.ToList();
但是Aggregate方法中的第二个“s1”是红色下划线的,编译器报错“An expression tree may not contain an assignment operator”
任何人都能够解释这意味着什么,以及我如何解决它?我已经进行了一些搜索,但找不到问题所在。我尝试阅读表达式树,但无法真正弄清楚它们是什么,这可能是问题所在。
我在这个项目的其他地方做了完全相同的事情,但那是使用内存中的集合,而不是使用 Linq to Entities 的集合,这可能是不同的。