как заменить значение типа списка данных значением словаря на основе совпадающего имени

#c#

#c#

Вопрос:

У меня есть словарь и список данных и

  1. Мне нужны только данные из списка данных lstData , если Type они существуют в словаре.

  2. и мне нужно заменить Type имя lstData на имя в словаре. type1 с помощью «X» и type3 с type3 помощью .

     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"},
        };
  

Ответ №1:

Использование 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();