调用对象时出现匿名问题 属性
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();
我有这个对象列表,其中包含带有元组的对象列表 列表产品:
[
[
{
"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();