回答編集履歴

1

追記

2021/03/21 08:16

投稿

退会済みユーザー
test CHANGED
@@ -101,3 +101,187 @@
101
101
 
102
102
 
103
103
  ![イメージ説明](64bb2d5fae6b3f95abaee4ea22059cb9.jpeg)
104
+
105
+
106
+
107
+ **【追記】**
108
+
109
+
110
+
111
+ 下の 2021/03/21 17:08 の私のコメントで「上の回答で書いたコードの grouped を Country でもう一度グループ化します。後で回答欄に追記しておきます」と書いた件です。上の回答は .NET Framework 4.8 ですが、質問者さんは .NET 5 とのことですので .NET 5 で書きました。
112
+
113
+
114
+
115
+ コードの下の方にある Human2, Person クラスに IEnumerable<Human2> として取得しています。それを JSON にシリアライズした結果も書いておきます(2021/03/21 15:11 のコメントのものと同じです)。
116
+
117
+
118
+
119
+ ```
120
+
121
+ using System;
122
+
123
+ using System.Collections.Generic;
124
+
125
+ using System.Linq;
126
+
127
+ using System.Text.Json;
128
+
129
+
130
+
131
+ namespace ConsoleAppLinq
132
+
133
+ {
134
+
135
+ class Program
136
+
137
+ {
138
+
139
+ static void Main(string[] args)
140
+
141
+ {
142
+
143
+ IEnumerable<Human> human = new List<Human>
144
+
145
+ {
146
+
147
+ new Human{ Country = "JP", Name = "Taro", Login = 10},
148
+
149
+ new Human{ Country = "JP", Name = "Jiro", Login = 5},
150
+
151
+ new Human{ Country = "US", Name = "Mike", Login = 20},
152
+
153
+ new Human{ Country = "JP", Name = "Taro", Login = 1}
154
+
155
+ };
156
+
157
+
158
+
159
+ var grouped = human
160
+
161
+ .GroupBy(h => new { Country = h.Country, Name = h.Name })
162
+
163
+ .Select(g => new Human
164
+
165
+ {
166
+
167
+ Country = g.Key.Country,
168
+
169
+ Name = g.Key.Name,
170
+
171
+ Login = (uint)g.Sum(x => x.Login)
172
+
173
+ });
174
+
175
+
176
+
177
+ foreach (var item in grouped)
178
+
179
+ {
180
+
181
+ Console.WriteLine($"Country: {item.Country}, Name: {item.Name}, Login: {item.Login}");
182
+
183
+ }
184
+
185
+
186
+
187
+ // ここまでは前回の回答と同じ
188
+
189
+
190
+
191
+ Console.WriteLine("------------------------------");
192
+
193
+
194
+
195
+ var grouped2 = grouped
196
+
197
+ .GroupBy(h => h.Country)
198
+
199
+ .Select(g => new Human2
200
+
201
+ {
202
+
203
+ Country = g.Key,
204
+
205
+ PersonalData = g.Select(p => new Person
206
+
207
+ {
208
+
209
+ Name = p.Name,
210
+
211
+ Login = p.Login
212
+
213
+ })
214
+
215
+ });
216
+
217
+
218
+
219
+ var json = JsonSerializer.Serialize<IEnumerable<Human2>>(grouped2,
220
+
221
+ new JsonSerializerOptions
222
+
223
+ {
224
+
225
+ WriteIndented = true
226
+
227
+ });
228
+
229
+
230
+
231
+ Console.WriteLine(json);
232
+
233
+ }
234
+
235
+ }
236
+
237
+
238
+
239
+ public class Human
240
+
241
+ {
242
+
243
+ public string Country { get; set; }
244
+
245
+ public string Name { get; set; }
246
+
247
+ public uint Login { get; set; }
248
+
249
+ }
250
+
251
+
252
+
253
+ public class Human2
254
+
255
+ {
256
+
257
+ public string Country { get; set; }
258
+
259
+ public IEnumerable<Person> PersonalData { get; set; }
260
+
261
+ }
262
+
263
+
264
+
265
+ public class Person
266
+
267
+ {
268
+
269
+ public string Name { get; set; }
270
+
271
+ public uint Login { get; set; }
272
+
273
+ }
274
+
275
+
276
+
277
+ }
278
+
279
+ ```
280
+
281
+
282
+
283
+ 結果は:
284
+
285
+
286
+
287
+ ![イメージ説明](5d1d0ebcf1ba20533f4c61658ba8c7c4.jpeg)