teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ID重複なし考慮の手段を追記

2018/07/24 15:54

投稿

len_souko
len_souko

スコア1367

answer CHANGED
@@ -5,4 +5,38 @@
5
5
  それが難しいならZuishinさんの提案通りにDataTableからList<T>へ作り直してからLinqでJOINの方が速いと思う
6
6
  DataTableは内部がobjectなので一々キャストして処理してるので
7
7
 
8
- なお、DBから取得する場合は個人的にはDapperさんがおすすめ
8
+ なお、DBから取得する場合は個人的にはDapperさんがおすすめ
9
+
10
+ IDが重複しないのなら以下のやり方でもありかもしれないけど、
11
+ 作ったデータもDataTableにしないといけないとなるとListにしてPersonのIDのコメントを外して
12
+ .First(r => r.ID == row.Field<int>("ID"))で対象のインスタンスを拾って体重を設定した後、
13
+ 最後にList<>を.ToDataTable()する感じかな?
14
+ ```C#
15
+ //以下のクラスを定義しておいて
16
+ public class Person
17
+ {
18
+ //public int ID{get;set;}
19
+ public string 名前{get;set;} = string.Empty;
20
+ public double 身長{get;set;} = 0.0;
21
+ public double 体重{get;set;} = 0.0;
22
+ }
23
+
24
+ //Dictionaryに設定していく
25
+ var dic = new Dictionary<int, Person>();
26
+
27
+ foreach(var row in tableA)
28
+ {
29
+ dic[row.Field<int>("ID")] = new Person
30
+ {
31
+ 名前 = row.Field<string>("名前"),
32
+ 身長 = row.Field<double>("身長")
33
+ };
34
+ }
35
+
36
+ foreach(var row in tableB)
37
+ {
38
+ var p = dic[row.Field<int>("ID")];
39
+ p.体重 = row.Field<double>("体重");
40
+ }
41
+
42
+ ```