【问题标题】:Replacing values in a list inside a Linq query with values from a dictionary用字典中的值替换 Linq 查询内列表中的值
【发布时间】:2020-07-29 00:37:33
【问题描述】:

这在 linq 查询中。

我今天在使用 Linq 时遇到了很多麻烦。

考虑一下 Linq 查询中的这一行:

EnginePartNames = x.EngineParts.Select(t => t.PartId).ToList(),

左边EnginePartNames是一个字符串类型的ICollection。

右侧,x.EngineParts.Select(t => t.PartId).ToList(),是一个 long 类型的通用列表。

我有这本词典:

Dictionary<int, string> partName = new Dictionary<int, string>()
        {
            {5763, "5.7 Engine"},
            {3511, "8-speed Transmission"},
            {8552, "Crankshaft"},
            {9127, "Cylinder Heads" }
        };

如何遍历我的 linq 查询中的右侧列表,并将每个 PartId 替换为 partName 字典中的字符串?

我试过了:

EnginePartNames = partName[x.EngineParts.Select(t => t.PartId)].ToList()

但它给了我这个错误:

无法从“System.Collections.Generic.IEnumerable”转换为 'int'

所以我知道将 select 语句中的值转换为字典中的 int 存在问题。

所以我尝试了这个:

EnginePartNames = partName[Convert.ToInt32(x.EngineParts.Select(t => t.PartId))].ToList()

并得到这个错误:

无法隐式转换类型“System.Collections.Generic.List” 到“System.Collections.Generic.ICollection”。明确的 存在转换(您是否缺少演员表?)

所以在这一点上我有点迷路了...我不知道接下来要尝试什么...

有什么想法吗?

谢谢!

【问题讨论】:

    标签: c# linq dictionary asp.net-core


    【解决方案1】:

    我猜,应该是这样的

    EnginePartNames = x.EngineParts.Select(t => partName[t.PartId]).ToList();
    

    您从字典中按键获取部件名称,由PartId 表示。它可以工作,因为IDictionary&lt;TKey,TValue&gt;indexer 接受TKey 类型的参数并返回TValue 类型的值。

    要将EnginePartNames 加入一个带有空格或逗号的字符串(根据 cmets),您应该使用string.Join 方法

    EnginePartNames = x.EngineParts.Select(t => partName[t.PartId]);
    var result = string.Join(" ", EnginePartNames);
    

    【讨论】:

    • 完全正确 - 在 C# 中,类型永远是你的朋友。
    • @SkyeBoniwell 是否回答了您的问题,您需要更多详细信息或信息吗?
    • 嗨 Pavel,它正在工作,但我不知道如何修改输出。目前它正在创建一个零件名称数组,这很棒,但它被写入屏幕就像这样:5.7 发动机,8 速变速箱,曲轴......逗号和下一个单词之间没有空格。你知道解决这个问题的方法吗?谢谢!
    • @SkyeBoniwell 这是正确的行为,插入空格和逗号应该将结果传递给string.Join 方法,例如string.Join(" ", EnginePartNames)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2019-04-07
    相关资源
    最近更新 更多