前提・実現したいこと
C#を使った開発をしています。(.NET Framework 4.7.2)
ある多重構造のclassの子classに含まれるListに対して、
値を値を追加しようと思っています。
foreachでは、実現出することが出来たのですが、可能であれば、linqを利用してシンプルなコートに変更しようと思っています。
当方いろいろ試したのですが、うまくデータを書き換えることが出来ず、苦戦しております。
皆様の知恵をお借りできないでしょうか。
linqを使わずに行った場合(現在出来ている)
クラス
C#
1 public class student 2 { 3 public int id; 4 public string name; 5 public List<testResult> testResults = new List<testResult>(); 6 7 } 8 9 public class testResult 10 { 11 public int times; 12 public int score; 13 }
サンプルデータ
C#
1 // サンプルデータを作成 2 static List<student> createSampleData() 3 { 4 var student = new student(); 5 var testResult = new testResult(); 6 var students = new List<student>(); 7 8 //サンプル作成(Aさん) 9 student = new student(); 10 student.id = 1; 11 student.name = "A"; 12 13 //1回目テスト 14 testResult = new testResult(); 15 testResult.times = 1; 16 testResult.score = 30; 17 student.testResults.Add(testResult); 18 19 //2回目テスト 20 testResult = new testResult(); 21 testResult.times = 2; 22 testResult.score = 40; 23 student.testResults.Add(testResult); 24 25 //3回目テスト 26 testResult = new testResult(); 27 testResult.times = 3; 28 testResult.score = 50; 29 student.testResults.Add(testResult); 30 31 students.Add(student); 32 33 //サンプル作成(Bさん) 34 student = new student(); 35 student.id = 2; 36 student.name = "B"; 37 38 //1回目テスト 39 testResult = new testResult(); 40 testResult.times = 1; 41 testResult.score = 90; 42 student.testResults.Add(testResult); 43 44 //2回目テスト 45 testResult = new testResult(); 46 testResult.times = 2; 47 testResult.score = 80; 48 student.testResults.Add(testResult); 49 50 students.Add(student); 51 52 return students; 53 }
実際のロジック
C#
1 static void Main(string[] args) 2 { 3 // サンプルデータ取得 4 var students = createSampleData(); 5 6 //本題 7 //ID:2のBさんの3回目テスト結果(99点)を追加する 8 var testResult = new testResult(); 9 testResult.times = 3; 10 testResult.score = 99; 11 12 //Linqに置き換えたい部分 ↓ 13 foreach (var student in students) 14 { 15 if (student.id == 2) 16 { 17 student.testResults.Add(testResult); 18 } 19 } 20 //Linqに置き換えたい部分 ↑ 21 }
試したこと
C#
1students.Where(student => student.id == 2).…
whereを使いBさんの絞り込みまでは出来ているが、この跡list(testResults)にデータを追加(add)する方法が見つからないです。
C#
1students.Where(student => student.id == 2).Select(x => x.testResults = x.testResults.Append(testResult).ToList());
このような形を試してみましたが間違いのようでした。色々と検索をしているのですが、解決策が見いだせず苦戦しております。
回答2件
あなたの回答
tips
プレビュー