首页 > 解决方案 > LINQ:按键从字典中获取项目及其值,然后将它们分配给变量

问题描述

例如,在 Parts 类中,我们有包含键“Number”和值“1”的数据字典。键始终称为“数字”,值始终是某个数字 1、2、3 等的字符串。我想将所有具有键“数字”的项目及其值分配给一个变量(列表),然后进行分组它们由零件中的 id 组成。所以最终结果应该是来自 Parts、Number 及其值的 Id。

   public class People
   {
   public List<Parts> Parts { get; set; }
   }


   public class Parts
   {
   public string Name {get;set;}
   public string Id {get;set;}
   public Dictionary<string,string> Data {get;set}
   }

   var msf = new People();

目前我的示例不能与 linq 一起正常工作:

 var temp = msf
   .Parts
   .Select(s => s.Data.Keys.Where(key => key.Contains("Number"))
   .ToList()
   .Select(s = > s.Value));

有人可以用 linq 给我更好的解决方案吗?

  "People":[  
  "id":"1234567"

   "Parts":[

   "id":"234567",
   "name":"Lqlq"
   "Data":{ 
   "number" : "1"
     }

  "id":"3424242",
   "name":"Lqlq2"
   "Data":{ 
   "number" : "2"
     }
 ]
    ]

标签: c#.netlinq

解决方案


这应该为您提供一个Dictionary<string, List<string>>包含每个“数字”值的 ID 字符串列表:

var idsByNumber = msf.Parts.Where(p => p.Data.ContainsKey("number"))    // filter for all that have a number
             .Select(p => new { ID = p.ID, Number = p.Data["number"] }) // select ID and the number value
             .GroupBy(x => x.Number)                                    // group by number
             .ToDictionary(g => g.Key, g => g.ToList()); // create dictionary number -> id list

推荐阅读