簡體   English   中英

評估數據表表達式

[英]Evaluate DataTable Expression

我有一個通過讀取Excel文件(使用OLEDB連接)構建的DataTable。 我想添加一列,其中包含用逗號分隔的所有列中的值的列表。

因此,如果我有名字,姓氏,地址,則需要第4列,該列是名字,姓氏和地址的逗號分隔。 我寧願不對記錄進行迭代,因為可能會有100,000到1,000,000的記錄。 有沒有一種方法可以在SQL語句中執行此操作? 我有"select * from [" + sheetName[i] + "]" ,其中sheetName[i]是當前循環的當前工作表名稱(循環X個工作表)。

最后,我將構建一個完全不同的DataTable,其中包含將用於對我的SQL Server數據庫中的表進行SqlBulkCopy的列。 我添加了此批量復制所需的列,然后將數據表從Excel工作表合並到新創建的數據表的末尾。 然后,我在使用的地方添加了新列。 用逗號分隔我的字段和Excel工作表數據表的表達式。 但是,我的新DataTable必須與我要批量復制到的表的格式完全相同。 所以我想刪除不在我的SQL表中的列,但是當我嘗試刪除這些列時出現錯誤(這很有意義),因為它們是其他列之一的Expression的一部分。

因此,有沒有一種方法可以查詢Excel文件來連接以逗號分隔的新列? 還是要對數據表的表達式強制求值,以便它對表達式求值並將求值的字符串存儲到該列,而不是僅使用表達式?

有沒有一種查詢Excel文件以逗號分隔的新列的方式?

等效的SQL將是:

select 
    *,
    FirstName + ", " + LastName + ", " + Address AS AllFields
from [" + sheetName[i] + "]"

另外,如果您有特定的目標格式,我建議您明確聲明各列,而不要使用"*"

select 
    FirstName, 
    LastName, 
    Address,
    FirstName + ", " + LastName + ", " + Address
from [" + sheetName[i] + "]"

如果在.NET Framework中使用System.Data.DataTable ,則可以使用可用於DataColumn的Expression屬性。 在此鏈接中討論DataColumn.Expression屬性

下面是一些簡單的代碼,用於說明如何使用Expression屬性在DataTable本身中將各列連接成一個逗號分隔的字符串。

DataTable table = new DataTable();

// create the columns 
DataColumn firstNameColumn = new DataColumn();
firstNameColumn.DataType = System.Type.GetType("System.String");
firstNameColumn.ColumnName = "FirstName";
firstNameColumn.DefaultValue = string.Empty;

DataColumn lastNameColumn = new DataColumn();
lastNameColumn.DataType = System.Type.GetType("System.String");
lastNameColumn.ColumnName = "LastName";
lastNameColumn.DefaultValue = string.Empty;

DataColumn addressColumn = new DataColumn();
addressColumn.DataType = System.Type.GetType("System.String");
addressColumn.ColumnName = "Address";
addressColumn.DefaultValue = string.Empty;

// this column uses an Expression to concatenate others together in comma delim
DataColumn concatColumn = new DataColumn();
concatColumn.DataType = System.Type.GetType("System.String");
concatColumn.ColumnName = "Concatenated";
concatColumn.Expression = "FirstName + ', ' + LastName + ', ' + Address"; 

// add columns to DataTable 
table.Columns.Add(firstNameColumn);
table.Columns.Add(lastNameColumn);
table.Columns.Add(addressColumn);
table.Columns.Add(concatColumn); 

// add some rows
DataRow row1 = table.NewRow();
row1["FirstName"] = "John";
row1["LastName"] = "Doe";
row1["Address"] = "123 East Street";
table.Rows.Add(row1);

DataRow row2 = table.NewRow();
row2["FirstName"] = "Bill";
row2["LastName"] = "Smith";
row2["Address"] = "444 North Avenue";
table.Rows.Add(row2); 

// simple iteration to print out the concatenated column
foreach (DataRow dr in table.Rows)
   Console.WriteLine(dr["Concatenated"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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