调用对象时出现匿名问题 属性

Anonymous Problem while calling object property

我有这个对象列表,其中包含带有元组的对象列表 列表产品:

[
    [
        {
            "group": "coloris",
            "valeursAndUids": [
                {
                    "Item1": "Beige",
                    "Item2": "QB32-20220325-486274"
                },
                {
                    "Item1": "Beige",
                    "Item2": "QB32-20220325-106045"
                },
                {
                    "Item1": "Venezia",
                    "Item2": "QB32-20220325-205994"
                },
                {
                    "Item1": "Venezia",
                    "Item2": "QB32-20220325-270903"
                }
            ]
        }
    ],
    [
        {
            "group": "ref_commercial",
            "valeursAndUids": [
                {
                    "Item1": "29245",
                    "Item2": "QB32-20220325-486274"
                },
                {
                    "Item1": "29245",
                    "Item2": "QB32-20220325-106045"
                },
                {
                    "Item1": "29245",
                    "Item2": "QB32-20220325-205994"
                },
                {
                    "Item1": "29245",
                    "Item2": "QB32-20220325-270903"
                }
            ]
        }
    ]
]

我正在尝试按值重新组合此列表

我做了什么:

List<Object> newList = new List<Object>();

foreach (var caracProd in listProducts)
{
    var groupName = caracProd.group;
    var groupValue = caracProd.valeursAndUids;
    var groupedCustomerList = caracProd.valeursAndUids
        .GroupBy(item => item.Item1)
        .Select(group => new { groupName = group.Key, Values = group.Select(item => new { item.Item2 }).ToList() })
        .OrderBy(item => item.groupName);

    newList.Add(groupedCustomerList);
}

新列表

[ [ { "groupName": "Beige", "Values": [ { "Item2": "QB32-20220325-486274" }, { "Item2": "QB32-20220325-106045" } ] }, { "groupName": "Venezia", "Values": [ { "Item2": "QB32-20220325-205994" }, { "Item2": "QB32-20220325-270903" } ] } ], [ { "groupName": "29245", "Values": [ { "Item2": "QB32-20220325-486274" }, { "Item2": "QB32-20220325-106045" }, { "Item2": "QB32-20220325-205994" }, { "Item2": "QB32-20220325-270903" } ] } ] ]

想要的结果

[ [ { "Coloris": "Beige", "Values": [ { "Item2": "QB32-20220325-486274" }, { "Item2": "QB32-20220325-106045" } ] }, { "Coloris": "Venezia", "Values": [ { "Item2": "QB32-20220325-205994" }, { "Item2": "QB32-20220325-270903" } ] } ], [ { "ref_commercial": "29245", "Values": [ { "Item2": "QB32-20220325-486274" }, { "Item2": "QB32-20220325-106045" }, { "Item2": "QB32-20220325-205994" }, { "Item2": "QB32-20220325-270903" } ] } ] ]

我想获取实际值而不是 groupName,但我在获取 groupName 的值时遇到问题,它返回一个匿名问题。

我尝试写 caracProd.group 而不是 groupName 以便我可以获得该值但出现错误

这是我遇到的错误,请问有什么方法可以达到我想要的效果吗?

非常感谢。

您不能使用匿名类型进行分组,因为在您的情况下,它们的属性名称是在运行时确定的。

您可以使用 Dictionary:

来达到类似的效果
var newList = listProducts
    .Select(prod => prod.valeursAndUids
        .GroupBy(item => item.Item1)
        .Select(g =>
        {
            var objAsDict = new Dictionary<string, object>
            {
                { prod.group, g.Key },
                { "Values", g.Select(item => new { item.Item2 }).ToList() }
            };
            return objAsDict;
        })
        .OrderBy(item => item[prod.group]))
    .ToList();

或与ExpandoObject相同:

var newList = listProducts
    .Select(prod => prod.valeursAndUids
        .GroupBy(item => item.Item1)
        .Select(g =>
        {
            var d = new ExpandoObject() as IDictionary<string, object>;
            d.Add(prod.group, g.Key);
            d.Add("Values", g.Select(item => new { item.Item2 }).ToList());
            return d;
        })
        .OrderBy(item => item[prod.group]))
    .ToList();