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

如何用RowId作为字典键转换集合,且值中不包含RowId?

解决方案

当然可以!你完全不需要把RowId包含在最终的匿名对象里,只需要利用ToDictionary的重载版本就能搞定——这个版本允许你分别指定字典的键选择器和要存入字典的值选择器,完美适配你的需求。

修改后的代码如下:

var jsonString = JsonConvert.SerializeObject(
    this.DocumentTypes.ToDictionary(
        c => c.RowId, // 指定字典的键为RowId
        c => new { c.Id, c.IsDocumentType } // 指定字典的值为只包含Id和IsDocumentType的匿名对象
    )
);

原理说明

你原来的写法是先通过Select投影出包含RowId的匿名对象,再基于这个对象的RowId字段生成字典。而直接使用ToDictionary的双参数重载,相当于把“选键”和“选值”的操作合并成一步:

  • 第一个参数c => c.RowId告诉LINQ用每个DocumentTypes元素的RowId作为字典的键;
  • 第二个参数c => new { c.Id, c.IsDocumentType }直接生成不含RowId的匿名对象作为对应的值。

这样生成的字典结构和你原来的完全一致——键依然是RowId,但字典的值里不再包含RowId字段,完全满足你的要求。

内容的提问来源于stack exchange,提问作者Thierry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:53