【发布时间】:2019-02-09 04:22:35
【问题描述】:
我正在尝试对数据表中的主键数组进行排序。我找不到任何与我正在尝试做的事情相匹配的示例。
我需要比较两个数据列数组。这需要排序(至少使用我能设计的唯一方法)。
我将在这里发布我的问题的答案:How to find the differences between two datatables
我正在尝试制定一个有效的解决方案。我可以将名称复制到单独的数组中,对它们进行排序和比较,但是这种方法很难维护代码。如果这是唯一的方法,那么我会这样做,但这些方法名称暗示我有更好的方法。
数据表已填充,PrimaryKey 数组已正确填充。但是我无法让这些方法起作用:
DTS.PrimaryKey.ToList().Sort(Function(x, y) x.Caption.CompareTo(y.Caption))
DTT.PrimaryKey.ToList().Sort(Function(x, y) x.Caption.CompareTo(y.Caption))
或者这些:
DTS.PrimaryKey.OrderBy(Function(c) c.Caption)
DTT.PrimaryKey.OrderBy(Function(c) c.Caption)
在我得到相同结果之前和之后:
?DTS.PrimaryKey(0).Caption
"Manufacturer"
?DTS.PrimaryKey(1).Caption
"Make"
?DTT.PrimaryKey(0).Caption
"Manufacturer"
?DTT.PrimaryKey(1).Caption
"Style"
DTS 和 DTT 都定义为 System.Data.DataTable。 我创建了几个简单的表进行测试:
CREATE TABLE [dbo].[AAA](
[Manufacturer] [nchar](10) NOT NULL,
[Make] [nchar](10) NOT NULL,
[Color] [nchar](10) NULL,
CONSTRAINT [PK_AAA] PRIMARY KEY CLUSTERED
(
[Manufacturer] ASC,
[Make] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
与
CREATE TABLE [dbo].[AAA](
[Manufacturer] [nchar](10) NOT NULL,
[Style] [nchar](10) NOT NULL,
[Color] [nchar](10) NULL,
CONSTRAINT [PK_AAA] PRIMARY KEY CLUSTERED
(
[Manufacturer] ASC,
[Style] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我不在乎它们的顺序是什么(升序或降序),只要它是某种顺序:
?DTS.PrimaryKey(0).Caption
"Make"
?DTS.PrimaryKey(1).Caption
"Manufacturer"
?DTT.PrimaryKey(0).Caption
"Manufacturer"
?DTT.PrimaryKey(1).Caption
"Style"
或
?DTS.PrimaryKey(0).Caption
"Manufacturer"
?DTS.PrimaryKey(1).Caption
"Make"
?DTT.PrimaryKey(0).Caption
"Style"
?DTT.PrimaryKey(1).Caption
"Manufacturer"
编辑:
我使用此代码进行了排序:
Dim s = DTS.PrimaryKey.OrderBy(Function(c) c.Caption)
Dim t = DTT.PrimaryKey.OrderBy(Function(c) c.Caption)
但我不喜欢编写让跟随我的程序员猜测的代码。我更愿意明确定义这些变量。当我检查我得到的类型时:
"System.Linq.OrderedEnumerable`2[System.Data.DataColumn,System.String]"
这看起来有点奇怪。另外,我似乎无法明确定义该类型的变量。这似乎与强类型变量背道而驰。
【问题讨论】:
标签: vb.net