C# 按公共字段统计嵌套类中的重复对象
我有一个对象数组,我想通过嵌套在每个对象中的公共属性对它们进行分组。由于我在解释时遇到困难,我将发布一个类似JSON的对象表示:C# 按公共字段统计嵌套类中的重复对象,c#,linq,C#,Linq,我有一个对象数组,我想通过嵌套在每个对象中的公共属性对它们进行分组。由于我在解释时遇到困难,我将发布一个类似JSON的对象表示: reviewList: [{ // review object userObject: {...} content: [ { questionContent: "what sweets do you think John likes?", questionId: 2,
reviewList: [{ // review object
userObject: {...}
content: [
{
questionContent: "what sweets do you think John likes?",
questionId: 2,
answers: [{answer:"Candy"},{answer:"Chocolate"}]
},
{
questionContent: "Do you like john?",
questionId: 3,
answers: [{answer:"No"}]
}
]
},
{ // review object
userObject: {...}
content: [ // Questions
{
questionContent: "what sweets do you think John likes?",
questionId: 2,
answers: [{answer:"Candy"}]
},
{
questionContent: "Do you like john?",
questionId: 3,
answers: [{answer:"Yes"}]
}
]
}]
我想从中得到的是一个对象列表,它看起来很像下面的示例:
[{
content: 'what sweets do you think John likes?',
answers: [{content: "Candy", count: 2}, {content:"chocolate", count:1}]
},{
content: 'Do you like john?',
answers: [{content: "Yes", count: 1}, {content:"No", count:1}]
}]
到目前为止,我已经尝试了以下linq代码,但我真的不知道如何继续,或者我是否在正确的道路上使用它
reviewList
.SelectMany(x => x.Questions)
.GroupBy(x=>x.QuestionId)
.Select(x=>x
.ToLookup(y=>y.QuestionContent, y=>y.Answers.ToList())
)
我也尝试使用ToDictionary而不是ToLookup,但我得到了重复的密钥异常如果使用C#匿名对象来显示结构,复制/粘贴会容易得多。在任何情况下,您都需要使用另一个
选择many
组合答案:
var ans = reviewList.SelectMany(r => r.content).GroupBy(r => r.questionContent).Select(r => new { content = r.Key, answers = r.SelectMany(a => a.answers).GroupBy(a => a.answer).Select(a => new { content = a.Key, Count = a.Count() }) });
您不需要选择许多可能是您的问题。GroupBy将进行选择。我使用SelectMany的原因是将
内容
列表中的所有问题对象提取到一个数组中,这样我就可以摆脱review类,只将问题放在一个列表中。我真的不确定如何使用GroupBy来实现相同的结果。请尝试以下方法:reviewList.GroupBy(x=>x.QuestionId)。选择(x=>x new{question=y=>y.QuestionContent,answer=y=>y.Answers.ToList())。选择多个(x=>x.ToList();这工作非常完美,完全符合我的要求。谢谢