首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 從 DataTable 高效提取指定欄位的兩種實用方法

     編輯:關於C語言

前言

在 C# 開發中,DataTable 是常用的記憶體資料結構。當資料表擁有大量欄位,但我們只需要其中幾個特定欄位時,如何高效提取?本文介紹兩種截然不同的策略,並補充五個實用的 DataTable 進階操作技巧。

方法一:移除不需要的欄位(適合少量欄位刪除)

最直觀的做法是遍歷並移除多餘欄位:

yourDataTable.Columns.Remove("ColumnName");

適用場景: 原始欄位不多,只需剔除 1~2 個欄位。若欄位數達幾十上百,逐一移除效率低且程式碼冗長。

方法二:DefaultView.ToTable 直接投影所需欄位(推薦)

利用 DataView 的 ToTable 多載,一次指定要保留的欄位名稱陣列:

DataTable result = yourDataTable.DefaultView.ToTable(
    false,                          // false = 保留重複列
    new[] { "NeededColumn1", "NeededColumn2" }  // 只保留這兩欄
);

優點: 程式碼簡潔、效能佳、語意清晰,無論原表有多少欄位都能一步到位。

進階補充:五個實用的 DataTable 操作技巧

1. 以 RowFilter 快速取得符合條件的列

避免 for 迴圈逐列判斷,改用 DataView.RowFilter:

DataView dv = new DataView(sourceTable, 
    "Age > 18",           // 篩選條件
    "Name ASC",           // 排序
    DataViewRowState.CurrentRows);
DataTable filtered = dv.ToTable();

2. 只取特定欄位建立新表

同方法二,但可搭配篩選:

DataTable subset = sourceTable.DefaultView.ToTable(
    false, new[] { "Id", "Name", "Email" });

3. 同結構表之間快速複製整列資料

destTable.Rows[i].ItemArray = srcTable.Rows[i].ItemArray;

4. 欄位數相同但名稱不同:先複製再改名

DataTable copy = source.Copy();
copy.Columns["OldName"].ColumnName = "NewName";

5. 調整欄位順序:SetOrdinal

DataTable dt = new DataTable();
dt.Columns.Add("Col1");
dt.Columns.Add("Col2");
dt.Columns.Add("Col3");
dt.Rows.Add(1, 2, 3);
// 將 Col3 移至第 0 位
dt.Columns["Col3"].SetOrdinal(0);

總結

  • 少量欄位刪除用 Columns.Remove;大量欄位只取少數用 DefaultView.ToTable。
  • 善用 DataView 進行篩選、排序、投影,避免手寫迴圈。
  • 掌握 Copy、ItemArray、SetOrdinal 等進階技巧,能大幅簡化資料表操作程式碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved