簡體   English   中英

如何對數據表的主鍵數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM