求值数据表表达式

本文关键字:表达式 数据表 | 更新日期: 2023-09-27 18:12:44

我有一个DataTable,它是从读取Excel文件(使用OLEDB连接)构建的。我想添加一个列,其中包含所有列中以逗号分隔的值列表。

如果我有FirstName, LastName, Address,那么我想要第4列,它是FirstName, LastName和Address的逗号分隔的连接。我宁愿不遍历记录,因为可能有100,000到1,000,000条记录。在SQL语句中有办法做到这一点吗?我有"select * from [" + sheetName[i] + "]",其中sheetName[i]是当前循环的当前工作表名称(循环X个工作表数)。

最后,我正在构建一个完全不同的数据表,其中包含我将使用SqlBulkCopy到我的SQL Server数据库中的表中的列。我添加了这个大容量副本所需的列,然后将我的数据表从Excel表合并到我新创建的数据表的末尾。然后在我用的地方添加了一列。表达式以逗号分隔我的字段与Excel工作表数据表。然而,我的新数据表必须在表的确切形式,我正在做批量复制到。所以我想删除列不在我的SQL表,但我得到错误(这是有意义的)当我试图删除这些列,因为它们是表达式的一部分为其他列之一。

所以,有没有一种方法来查询Excel文件连接一个逗号分隔的新列?还是强制对数据表表达式进行求值,以便它对表达式求值并将求值的字符串存储到该列,而不是单独使用Expression ?

求值数据表表达式

如果您使用的是System.Data。DataTable在。net框架中,你可以使用表达式属性,该属性可用于 datacolumcolumn 。在这个链接dataccolumn中讨论了它。属性表达式。

下面是一些简单的代码来演示如何使用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"]);

是否有一种方法来查询Excel文件连接逗号分隔的新列?

对应的SQL是:

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

另外,如果你有一个特定的目标格式,我建议明确地声明列,而不是使用"*":

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