回答編集履歴

3

訂正

2018/10/27 09:01

投稿

退会済みユーザー
test CHANGED
@@ -230,7 +230,7 @@
230
230
 
231
231
  DataSet ds = CreateDataSource();
232
232
 
233
- file = "withschema.xml";
233
+ string file = "withschema.xml";
234
234
 
235
235
  ds.WriteXml(dir + file, XmlWriteMode.WriteSchema);
236
236
 

2

追記

2018/10/27 09:01

投稿

退会済みユーザー
test CHANGED
@@ -181,3 +181,193 @@
181
181
  ID: 14, Name: Product Name_14, Price: 1845000, Discontinued: True, Date: 2018/10/26 11:10:33
182
182
 
183
183
  ```
184
+
185
+
186
+
187
+ **【追記2】**
188
+
189
+
190
+
191
+ 下の私の 2018/10/27 15:22 のコメントで「具体的にどのようにするかは後で回答欄に追記しておきます」と書きましたが、それを以下に書きます。
192
+
193
+
194
+
195
+ コードを読めばわかると思うのでコードだけ。
196
+
197
+
198
+
199
+ ```
200
+
201
+ using System;
202
+
203
+ using System.Collections.Generic;
204
+
205
+ using System.Linq;
206
+
207
+ using System.Text;
208
+
209
+ using System.Threading.Tasks;
210
+
211
+ using System.Data;
212
+
213
+
214
+
215
+ namespace ConsoleApplication1
216
+
217
+ {
218
+
219
+ class Program
220
+
221
+ {
222
+
223
+ static void Main(string[] args)
224
+
225
+ {
226
+
227
+ string dir = @"どこかの適当なフォルダ";
228
+
229
+
230
+
231
+ DataSet ds = CreateDataSource();
232
+
233
+ file = "withschema.xml";
234
+
235
+ ds.WriteXml(dir + file, XmlWriteMode.WriteSchema);
236
+
237
+
238
+
239
+ file = "WithoutSchema.xml";
240
+
241
+ ds.WriteXml(dir + file, XmlWriteMode.IgnoreSchema);
242
+
243
+
244
+
245
+ DataSet dataset1 = new DataSet();
246
+
247
+ DataSet dataset2 = new DataSet();
248
+
249
+
250
+
251
+ dataset1.ReadXml(dir + "WithSchema.xml");
252
+
253
+ dataset2.ReadXml(dir + "WithoutSchema.xml");
254
+
255
+
256
+
257
+ Type type1 = dataset1.Tables[0].Columns["Date"].DataType;
258
+
259
+ Type type2 = dataset2.Tables[0].Columns["Date"].DataType;
260
+
261
+
262
+
263
+ Console.WriteLine($"Type: {type1}");
264
+
265
+ Console.WriteLine($"Type: {type2}");
266
+
267
+
268
+
269
+ // 結果は:
270
+
271
+ // Type: System.DateTime
272
+
273
+ // Type: System.String
274
+
275
+
276
+
277
+ DataRow[] datarows = (from row in dataset1.Tables[0].AsEnumerable()
278
+
279
+ let date = row.Field<DateTime>("Date")
280
+
281
+ where date <= DateTime.Now && date >= DateTime.Now.AddDays(-7)
282
+
283
+ select row).ToArray();
284
+
285
+
286
+
287
+ foreach (DataRow row in datarows)
288
+
289
+ {
290
+
291
+ Console.WriteLine($"ID: {row[0]}, Name: {row[1]}, Price: {row[2]}, Discontinued: {row[3]}, Date: {row[4]}");
292
+
293
+ }
294
+
295
+
296
+
297
+ // 結果は:
298
+
299
+ // ID: 9, Name: Product Name_9, Price: 1230000, Discontinued: False, Date: 2018 / 10 / 21 15:27:08
300
+
301
+ // ID: 10, Name: Product Name_10, Price: 1353000, Discontinued: True, Date: 2018 / 10 / 22 15:27:08
302
+
303
+ // ID: 11, Name: Product Name_11, Price: 1476000, Discontinued: False, Date: 2018 / 10 / 23 15:27:08
304
+
305
+ // ID: 12, Name: Product Name_12, Price: 1599000, Discontinued: True, Date: 2018 / 10 / 24 15:27:08
306
+
307
+ // ID: 13, Name: Product Name_13, Price: 1722000, Discontinued: False, Date: 2018 / 10 / 25 15:27:08
308
+
309
+ // ID: 14, Name: Product Name_14, Price: 1845000, Discontinued: True, Date: 2018 / 10 / 26 15:27:08
310
+
311
+ }
312
+
313
+
314
+
315
+ // データソース用の DataSet を作成
316
+
317
+ protected static DataSet CreateDataSource()
318
+
319
+ {
320
+
321
+ DataTable dt = new DataTable();
322
+
323
+ DataRow dr;
324
+
325
+
326
+
327
+ dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
328
+
329
+ dt.Columns.Add(new DataColumn("Name", typeof(string)));
330
+
331
+ dt.Columns.Add(new DataColumn("Price", typeof(decimal)));
332
+
333
+ dt.Columns.Add(new DataColumn("Discontinued", typeof(bool)));
334
+
335
+ dt.Columns.Add(new DataColumn("Date", typeof(DateTime)));
336
+
337
+
338
+
339
+ for (int i = 0; i < 15; i++)
340
+
341
+ {
342
+
343
+ dr = dt.NewRow();
344
+
345
+ dr["ID"] = i;
346
+
347
+ dr["Name"] = "Product Name_" + i.ToString();
348
+
349
+ dr["Price"] = 123000 * (i + 1);
350
+
351
+ dr["Discontinued"] = (i % 2 == 0) ? true : false;
352
+
353
+ dr["Date"] = DateTime.Now.AddDays(i - 15);
354
+
355
+ dt.Rows.Add(dr);
356
+
357
+ }
358
+
359
+
360
+
361
+ DataSet ds = new DataSet();
362
+
363
+ ds.Tables.Add(dt);
364
+
365
+ return ds;
366
+
367
+ }
368
+
369
+ }
370
+
371
+ }
372
+
373
+ ```

1

追記

2018/10/27 06:34

投稿

退会済みユーザー
test CHANGED
@@ -109,3 +109,75 @@
109
109
 
110
110
 
111
111
  kiichi54321 さん、runny_nose さんの回答は DataTable の当該列が DateTime 型であるという前提だと思いますが、そうだとすると DataTable を直さないと話が違ってくると思います。
112
+
113
+
114
+
115
+ **【追記】**
116
+
117
+
118
+
119
+ 下の私の 2018/10/27 11:23 のコメントで「後で検証して回答欄に追記しておきます」と書きましたが、それを以下に書きます。
120
+
121
+
122
+
123
+ 上にアップしたスキーマ付きの xml ファイルを DataSet.ReadXml メソッドで DataSet/ DataTable に読み込めば Date 列は DateTime 型になります。
124
+
125
+
126
+
127
+ それから前回のスレッド [https://teratail.com/questions/153141](https://teratail.com/questions/153141) の応用で DataRow[] 型のオブジェクトを取得できます。
128
+
129
+
130
+
131
+ 具体的には、以下のようにすれば、
132
+
133
+
134
+
135
+ ```
136
+
137
+ DataSet dataset1 = new DataSet();
138
+
139
+ dataset1.ReadXml("xml ファイルのパス");
140
+
141
+
142
+
143
+ DataRow[] datarows = (from row in dataset1.Tables[0].AsEnumerable()
144
+
145
+ let date = row.Field<DateTime>("Date")
146
+
147
+ where date <= DateTime.Now && date >= DateTime.Now.AddDays(-7)
148
+
149
+ select row).ToArray();
150
+
151
+
152
+
153
+ foreach (DataRow row in datarows)
154
+
155
+ {
156
+
157
+ Console.WriteLine($"ID: {row[0]}, Name: {row[1]}, Price: {row[2]}, Discontinued: {row[3]}, Date: {row[4]}");
158
+
159
+ }
160
+
161
+ ```
162
+
163
+
164
+
165
+ 結果は以下のようになります:
166
+
167
+
168
+
169
+ ```
170
+
171
+ ID: 9, Name: Product Name_9, Price: 1230000, Discontinued: False, Date: 2018/10/21 11:10:33
172
+
173
+ ID: 10, Name: Product Name_10, Price: 1353000, Discontinued: True, Date: 2018/10/22 11:10:33
174
+
175
+ ID: 11, Name: Product Name_11, Price: 1476000, Discontinued: False, Date: 2018/10/23 11:10:33
176
+
177
+ ID: 12, Name: Product Name_12, Price: 1599000, Discontinued: True, Date: 2018/10/24 11:10:33
178
+
179
+ ID: 13, Name: Product Name_13, Price: 1722000, Discontinued: False, Date: 2018/10/25 11:10:33
180
+
181
+ ID: 14, Name: Product Name_14, Price: 1845000, Discontinued: True, Date: 2018/10/26 11:10:33
182
+
183
+ ```