[英]How to sort a Datatable's primary keys array
我正在嘗試對數據表中的主鍵數組進行排序。 我找不到任何與我正在嘗試做的事情相匹配的示例。
我需要比較兩個數據列數組。 這需要排序(至少使用我能設計的唯一方法)。
我將在這里發布我的問題的答案: 如何找到兩個數據表之間的差異
我正在嘗試制定有效的解決方案。 我可以將名稱復制到單獨的數組中,對它們進行排序和比較,但是這種方法很難維護代碼。 如果這是唯一的方法,那么我會這樣做,但是這些方法名稱暗示我有更好的方法。
數據表已填充並且主鍵數組已正確填充。 但是我無法讓這些方法起作用:
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]"
這看起來有點奇怪。 另外,我似乎無法明確定義該類型的變量。 這似乎與強類型變量背道而馳。
Dim s As IOrderedEnumerable(Of DataColumn) = dt.PrimaryKey.OrderBy(Function(c) c.Caption)
這是強類型的,沒有顯式聲明,因為編譯器知道數據類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.