如何获取MasterData类型结果?基于属性条件的父模型查询问询
正确实现方式分析
当前代码的问题在于使用SelectMany将所有MasterData下的sections扁平化为单一的Section集合,最终返回的是List<Section>,而非你需要的MasterData类型集合。要返回筛选后保留符合条件sections的MasterData实例,可按以下方式实现:
方式1:创建新的MasterData实例(推荐,不修改原数据)
通过投影操作,为每个MasterData实例复制原有属性,并筛选其sections集合:
var result = MasterData .Select(master => new MasterData { // 复制MasterData中需要保留的其他属性,示例: // MasterId = master.MasterId, // Description = master.Description, // 筛选符合条件的sections sections = master.sections.Where(x => MasterDataAttId_All.Contains(x.SectionId)).ToList() }) // 可选:过滤掉筛选后sections为空的MasterData实例 .Where(master => master.sections.Any()) .ToList();
方式2:修改原MasterData实例(不推荐,会改变原数据)
如果允许修改原集合中的MasterData对象,可以直接更新其sections属性:
// 先转为List避免多次枚举原集合 var result = MasterData.ToList(); foreach (var master in result) { master.sections = master.sections.Where(x => MasterDataAttId_All.Contains(x.SectionId)).ToList(); }
注意事项
- 方式1不会影响原
MasterData集合中的数据,适合大多数场景; - 方式2会直接修改原对象的
sections属性,可能引发意外的副作用,需谨慎使用; - 若
MasterData的sections是只读集合,需确保新赋值的集合类型与原属性兼容。
内容的提问来源于stack exchange,提问作者namaste1968
相关产品推荐
相关产品推荐

