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

回答編集履歴

2

追記

2017/10/31 03:42

投稿

退会済みユーザー
answer CHANGED
@@ -86,4 +86,32 @@
86
86
  }
87
87
  }
88
88
  }
89
- ```
89
+ ```
90
+
91
+ **【追記】**
92
+
93
+ コメント欄の追加質問の件です。
94
+
95
+ > 条件に一致したデータが複数存在した場合は既に配列に存在した場合はスキップしたい
96
+
97
+ IEnumerable<T> で T が匿名型の場合(上のコードで言うと result がそれ)は、単純に result に Distinct() メソッドを適用すれば期待通り重複のない結果が得られます。具体的には例えば、以下のようにしてください。
98
+
99
+ ```
100
+ var result = from o in orders.AsEnumerable()
101
+ join c in customers.AsEnumerable()
102
+ on o.Field<string>("CustomerID") equals c.Field<string>("CustomerID")
103
+ where o.Field<string>("ShipCity") == c.Field<string>("City")
104
+ select new
105
+ {
106
+ OrderID = o.Field<int>("OrderID"),
107
+ CompanyName = c.Field<string>("CompanyName"),
108
+ ShipCity = o.Field<string>("ShipCity")
109
+ };
110
+
111
+ result = result.Distinct(); // この行を追加
112
+ ```
113
+
114
+ なお、T にカスタムデータ型を使った場合はそう簡単には行きません。詳しくは以下の記事を見てください。
115
+
116
+ 匿名型と Distinct メソッド
117
+ [http://surferonwww.info/BlogEngine/post/2015/12/08/anonymous-type-and-distinct-method.aspx](http://surferonwww.info/BlogEngine/post/2015/12/08/anonymous-type-and-distinct-method.aspx)

1

訂正&追記

2017/10/31 03:41

投稿

退会済みユーザー
answer CHANGED
@@ -1,13 +1,13 @@
1
1
  質問者さんの作った DataTable の内容が不明ですので、アップされたコードをどう直せばよいかはなかなか答えにくいです。
2
2
 
3
- なので、Microsoft が提供するサンプルデータベース Northwind の Orders, Customers テーブルから以下のクエリを使って DataTable を作り、それを Linq を使って CUstomerID が一致する条件で Inner Join し、さらに ShipCity と City が一致する条件で抽出するサンプルを書きました。
3
+ なので、Microsoft が提供するサンプルデータベース Northwind の Orders, Customers テーブルから以下のクエリを使って DataTable を作り、それを Linq を使って CustomerID が一致する条件で Inner Join し、さらに ShipCity と City が一致する条件で抽出するサンプルを書きました。
4
4
 
5
5
  ```
6
6
  SELECT OrderID, CustomerID, ShipCity FROM Orders
7
7
  SELECT CustomerID, CompanyName, City FROM Customers
8
8
  ```
9
9
 
10
- コードは以下の通りです。不明な点があれば聞いてください。
10
+ コードは以下の通りです。不明な点があれば聞いてください。また、これが質問者さんのやりたいことと違う場合は、どこがどのように違うかを連絡ください。
11
11
 
12
12
  ```
13
13
  using System;
@@ -78,7 +78,7 @@
78
78
  foreach (var item in result)
79
79
  {
80
80
  DataRow row = table.NewRow();
81
- //row["OrderID"] = item.OrderID;
81
+ row["OrderID"] = item.OrderID;
82
82
  row["CompanyName"] = item.CompanyName;
83
83
  row["ShipCity"] = item.ShipCity;
84
84
  table.Rows.Add(row);