两个嵌套数组对象的Linq查询
我从两个单独的JSON文件中提取了两个对象。一个是源,另一个是从源中查找特定数据的引用 源JSON:两个嵌套数组对象的Linq查询,linq,Linq,我从两个单独的JSON文件中提取了两个对象。一个是源,另一个是从源中查找特定数据的引用 源JSON: { "options": [ { "id": 1, "product_id": 1, "size": "S", "color": "red&quo
{
"options": [
{
"id": 1,
"product_id": 1,
"size": "S",
"color": "red"
},
{
"id": 2,
"product_id": 1,
"size": "M",
"color": "red"
},
{
"id": 3,
"product_id": 1,
"size": "L",
"color": "red"
},
{
"id": 4,
"product_id": 1,
"size": "XL",
"color": "red"
},
{
"id": 5,
"product_id": 1,
"size": "S",
"color": "blue"
},
{
"id": 6,
"product_id": 1,
"size": "M",
"color": "blue"
},
{
"id": 7,
"product_id": 1,
"size": "L",
"color": "blue"
},
{
"id": 8,
"product_id": 1,
"size": "XL",
"color": "blue"
}
]
}
查找JSON:
{
"product": {
"styles": [
{
"color": "red",
"options": [1,2,3,4]
},
{
"color": "blue",
"options": [5,6,7,8]
}
]
}
}
两者都反序列化为C#模型
我需要得到所有选项中不同大小的列表,所以我这样查询:
var sizes = (from o in options
from s in product.styles
from ss in s.optionIds
where ss == o.id
select new Size
{
name = v.size,
optionIds = // needs to be an array with all option ids
}
).ToList().GroupBy(ps => ps.name).Select(ps => ps.First()).ToList();
from/where部分按预期工作,我得到一个列表或不同的大小,但是,我还需要列出新大小对象中的所有选项ID…请参阅代码中的注释
我期望的结果数组是:
[
{
"name": "S",
"optionIds": [1,5]
},
{
"name": "M",
"optionIds": [2,6]
},
{
"name": "L",
"optionIds": [3,7]
},
{
"name": "XL",
"optionIds": [4,8]
}
]
据我所知,您的“查找JSON”不包含源代码中尚未找到的任何信息,因此没有必要用这些数据来混淆视听
var sizes = options
.GroupBy(o => o.size, o => o.id)
.Select(g => new Size {name = g.Key, options = g.ToList()})
.ToList()
不完全是。这些都是简化的示例,重点介绍了我需要进行的连接类型,源上还有其他数据是根据源中的选项ID提取的。对不起,我可能应该澄清一下。最终,源JSON是选项ID和所有相关数据的真实来源,因此有一个查找JSON文件来定义从源中提取的内容。@Scott:能否更新您的问题以显示您期望的结果数组上的数据,该数组需要来自查找JSON?