两个嵌套数组对象的Linq查询

两个嵌套数组对象的Linq查询,linq,Linq,我从两个单独的JSON文件中提取了两个对象。一个是源,另一个是从源中查找特定数据的引用 源JSON: { "options": [ { "id": 1, "product_id": 1, "size": "S", "color": "red&quo

我从两个单独的JSON文件中提取了两个对象。一个是源,另一个是从源中查找特定数据的引用

源JSON:

 {
    "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?