オブジェクトの配列があり、すべてのオブジェクトの内部にネストされた共通のプロパティでグループ化したい。私は悩みにそれを説明しようとしていますので、私は、オブジェクトのJSONのような表現を掲載します:共通フィールドでネストされたクラスの重複オブジェクトをカウントする
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())
)
私はまた、代わりにToLookupのToDictionaryてみましたが、私はあなたがあなたの構造を示すために、C#の匿名オブジェクトを使用する場合は、/貼り付けをコピーする非常に簡単である重複キーの例外に
問題の可能性があるSelectManyは必要ありません。 GroupByは選択を行います。 – jdweng
私がSelectManyを使用した理由は、すべての質問オブジェクトを 'content'リストから単一の配列に抽出することで、レビュークラスを取り除くことができ、質問だけをリストに入れることができます。同じ結果を達成するためにGroupByをどのように使うことができるのか、私は本当に分かりません。 – Zephy
これを試してみてください:.GroupBy(x => x.QuestionId) .Select(x => x新しい{質問= y => y.QuestionContent、答え= y => y.Answers.ToList()}) .SelectMany(x => x).ToList(); – jdweng