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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:14:04