c# - 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"
}
]
]
解决方案
这应该为您提供一个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