回答編集履歴

2

見直しキャンペーン中

2023/08/15 15:29

投稿

TN8001
TN8001

スコア9396

test CHANGED
@@ -1,4 +1,4 @@
1
- 一応`IEqualityComparer`も書きましたが、Linqで十分じゃないですかね?
1
+ 一応`IEqualityComparer`も書きましたが、LINQで十分じゃないですかね?
2
2
 
3
3
  ```cs
4
4
  using System.Collections.Generic;
@@ -27,7 +27,7 @@
27
27
  dataTable.Rows.Add(1, 2, "b");
28
28
  dataTable.Rows.Add(1, 1, "a");
29
29
 
30
- // Sort(Linqでもいいがせっかく機能があるので)
30
+ // Sort(LINQでもいいがせっかく機能があるので)
31
31
  var view = new DataView(dataTable) { Sort = "X ASC, Y ASC, Z ASC", };
32
32
  var SortedTable = view.ToTable();
33
33
 

1

見直しキャンペーン中

2023/07/23 08:25

投稿

TN8001
TN8001

スコア9396

test CHANGED
@@ -1,135 +1,68 @@
1
1
  一応`IEqualityComparer`も書きましたが、Linqで十分じゃないですかね?
2
2
 
3
-
4
-
5
- ```C#
3
+ ```cs
6
-
7
4
  using System.Collections.Generic;
8
-
9
5
  using System.Data;
10
-
11
6
  using System.Linq;
12
-
13
7
  using System.Windows.Forms;
14
8
 
15
-
16
-
17
9
  namespace Questions299938
18
-
19
10
  {
20
-
21
11
  public partial class Form1 : Form
22
-
23
12
  {
24
-
25
13
  public Form1()
26
-
27
14
  {
28
-
29
15
  InitializeComponent();
30
16
 
31
-
32
-
33
17
  var dataGridView1 = new DataGridView { Dock = DockStyle.Fill, };
34
-
35
18
  Controls.Add(dataGridView1);
36
19
 
37
-
38
-
39
20
  var dataTable = new DataTable();
40
-
41
21
  dataTable.Columns.Add("X", typeof(int));
42
-
43
22
  dataTable.Columns.Add("Y", typeof(int));
44
-
45
23
  dataTable.Columns.Add("Z");
46
24
 
47
-
48
-
49
25
  dataTable.Rows.Add(2, 2, "d");
50
-
51
26
  dataTable.Rows.Add(2, 2, "c");
52
-
53
27
  dataTable.Rows.Add(1, 2, "b");
54
-
55
28
  dataTable.Rows.Add(1, 1, "a");
56
29
 
57
-
58
-
59
30
  // Sort(Linqでもいいがせっかく機能があるので)
60
-
61
31
  var view = new DataView(dataTable) { Sort = "X ASC, Y ASC, Z ASC", };
62
-
63
32
  var SortedTable = view.ToTable();
64
33
 
65
-
66
-
67
34
  // Distinct(Xでグループ化した中から1個目を採用する)
68
-
69
35
  dataGridView1.DataSource = SortedTable.AsEnumerable()
70
-
71
36
  .GroupBy(x => x.Field<int>("X"))
72
-
73
37
  .Select(x => x.First())
74
-
75
38
  .CopyToDataTable();
76
-
77
39
  //++++++++
78
-
79
40
  //X Y Z
80
-
81
41
  //++++++++
82
-
83
42
  //1 1 a
84
-
85
43
  //2 2 c
86
-
87
44
 
88
-
89
45
  //dataGridView1.DataSource = SortedTable.AsEnumerable()
90
-
91
46
  // .Distinct(new DataRowEqualityComparer())
92
-
93
47
  // .CopyToDataTable();
94
-
95
48
  }
96
49
 
97
-
98
-
99
50
  //private class DataRowEqualityComparer : IEqualityComparer<DataRow>
100
-
101
51
  //{
102
-
103
52
  // public bool Equals(DataRow dr1, DataRow dr2)
104
-
105
53
  // {
106
-
107
54
  // //return dr1["X"].ToString() == dr2["X"].ToString();
108
-
109
55
  // return dr1.Field<int>("X") == dr2.Field<int>("X");
110
-
111
56
  // }
112
57
 
113
-
114
-
115
58
  // public int GetHashCode(DataRow dr)
116
-
117
59
  // {
118
-
119
60
  // //return dr["X"].GetHashCode();
120
-
121
61
  // return dr.Field<int>("X").GetHashCode();
122
-
123
62
  // }
124
-
125
63
  //}
126
-
127
64
  }
128
-
129
65
  }
130
-
131
66
  ```
132
67
 
133
-
134
-
135
68
  `DataTable`をまともに使ったことないので、間違い・もっといい書き方があるかもしれません^^;