C# Linq问题:筛选嵌套列表成员并构建指定结构字典
解决C# Linq构建字典的编译错误问题
嗨,我来帮你搞定这个Linq的问题~你遇到的CS0746错误,原因很简单:匿名类型的成员必须有明确的名称,你原来的代码里,x.ListMembers.Select(...)这部分没有给这个匿名成员指定属性名,编译器不知道该叫它啥,所以就报错啦。
你的需求是构建一个字典:键为PersonalList.ListNumber,值是仅包含MemberName和MemberType的ListMember子集,我给你两种简洁的实现方式:
方式一:先构建匿名类型再转字典
先把需要的字段用命名好的匿名类型提取出来,再转换成字典:
// 先提取带命名成员的匿名类型数组 var personalLists = _allPersonalLists.Select(x => new { x.ListNumber, // 给这个成员指定名称Members,编译器就不会报错了 Members = x.ListMembers.Select(y => new { y.MemberName, y.MemberType }) }).ToArray(); // 转换为目标字典,值转成List方便后续操作(如果不需要List可以去掉ToList()) var memberDict = personalLists.ToDictionary(item => item.ListNumber, item => item.Members.ToList());
方式二:直接用ToDictionary一步到位
更高效的方式是跳过中间的匿名类型数组,直接用ToDictionary方法完成构建:
var memberDict = _allPersonalLists.ToDictionary( // 字典的键:取PersonalList的ListNumber list => list.ListNumber, // 字典的值:筛选出ListMember的MemberName和MemberType,转成List list => list.ListMembers.Select(member => new { member.MemberName, member.MemberType }).ToList() );
小提示
如果你不需要字典的值是List<T>,只是需要可枚举的集合,那可以去掉ToList(),直接保留Select返回的IEnumerable<T>即可,根据你的实际使用场景调整就行。
内容的提问来源于stack exchange,提问作者Azeristar
相关产品推荐
相关产品推荐

