如何使用linq基于键改变字典的值

本文关键字:字典 改变 于键 何使用 linq | 更新日期: 2023-09-27 18:11:12

我有一个Dictionary,类型为

  Dictionary<string, string> newdictionary = new Dictionary<string, string>();
  newdictionary.Add("12345", "chip1");
  newdictionary.Add("23456", "chip2");
现在我有了一个类型为 的List
   internal class CustomSerial
    {
        public string SerialNo { get; set; }
        public decimal ecoID { get; set; }
    } 
   var customList = new List<CustomSerial>();
   CustomSerial custObj1= new CustomSerial();
   custObj1.ecoID =1;
   custObj1.SerialNo = "12345";
   customList.Add(custObj1);
   CustomSerial custObj2 = new CustomSerial();
   custObj2.ecoID = 2;
   custObj2.SerialNo = "23456";
   customList.Add(custObj2);

现在我需要更新初始字典通过过滤键与他们的SerialNumber和替换值与ecoID。

当我尝试这个时,它给出

  foreach (KeyValuePair<string, string> each in newdictionary)
  {                       
    each.Value = customList.Where(t => t.SerialNo == each.Key).Select(t => t.ecoID).ToString();
  }

System.Collections.Generic.KeyValuePair。

如何使用linq基于键改变字典的值

LIN(Q)是一个查询而不是更新的工具。但是,您可以首先查询需要更新的内容。例如:

var toUpdate = customList
   .Where(c => newdictionary.ContainsKey(c.SerialNo))
   .Select(c => new KeyValuePair<string, string>(c.SerialNo, c.ecoID.ToString()));
foreach(var kv in toUpdate)
    newdictionary[kv.Key] = kv.Value;

顺便说一下,你得到"KeyValuePair "。

KeyValuePair<TKey, TValue>是一个不能修改的struct

你会有最简单的这种形式:虽然我不明白为什么你分配相同的值,但方法适用无论

 var dictionary = new Dictionary<string, string>() { { "12345", "chip1" }, { "23456", "chip2" } };
                var customList = new List<CustomSerial>() { new CustomSerial() { ecoID = 1, SerialNo = "12345" }, new CustomSerial() { ecoID = 2, SerialNo = "23456" } };
                dictionary.Keys.ToList().ForEach(key =>
                {
                    dictionary[key] = customList.FirstOrDefault(c => c.SerialNo == key).SerialNo;
                });