首页 > 解决方案 > 如何根据匹配名称将数据列表类型值替换为字典值

问题描述

我有一本字典和数据列表

  1. lstData如果Type字典中存在,我只需要数据列表中的数据。

  2. 我需要用字典Type中的名称替换名称。带有“X”和带有.lstDatatype1type3type3

    var dictionary = new Dictionary<string, string> { { "type1", "X" }, { "type3", "type3" } };
    
        var lstData = new List<Data>
        {
            new Data {Name = "N1", Type = "type1"},
            new Data {Name = "N1", Type = "type2"},
            new Data {Name = "N2", Type = "type3"},
        };
    

通过以下查询,我能够实现第 1 部分),如何做第 2 部分)?

        var x = lstData.Where(a => new List<string>(dictionary.Keys).Any(b => b == a.Type));

预期输出应该是,

x = new List<Data>
        {
            new Data {Name = "N1", Type = "X"},
            new Data {Name = "N2", Type = "type3"},
        };

标签: c#

解决方案


使用ContainsKey会更有效,尤其是对于大型数据集。

然后,您可以使用Select来创建新Data对象:

var x = listData
    .Where(d => dictionary.ContainsKey(d.Type)) // Part 1
    .Select(d => new Data { Name = d.Name, Type = dictionary[d.Type] }) // Part 2
    .ToList();

推荐阅读