数据表返回空
DataTable returning empty
对于我的应用程序,有几个单独的数据表,我需要根据匹配的 ID 创建一个新的数据表。我必须多次执行该过程,所以我创建了一个函数,这样我就不会重复代码,我是这样做的:
private static DataTable CloneTable(DataTable originalTable, DataTable newTable, DataTable targetTable,
string addedColumn, string columnToExtract, bool multipleConditions = false, string secondColumnName = null, string secondColumnConditon= null)
{
newTable = originalTable.Clone();
newTable.Columns.Add(addedColumn);
foreach (DataRow row in originalTable.Rows)
{
DataRow[] rowsTarget;
if (multipleConditions == false)
{
rowsTarget = targetTable.Select(string.Format("ItemId='{0}'", Convert.ToString(row["ItemId"])));
} else
{
rowsTarget = targetTable.Select(string.Format("ItemId='{0}' AND {1} ='{2}'", Convert.ToString(row["ItemId"]), secondColumnName, secondColumnConditon));
}
if (rowsTarget != null && rowsTarget.Length > 0)
{
string data = rowsTarget[0][columnToExtract].ToString();
var lst = row.ItemArray.ToList();
lst.Add(data);
newTable.Rows.Add(lst.ToArray());
}
else
{
string data = "";
var lst = row.ItemArray.ToList();
lst.Add(data);
newTable.Rows.Add(lst.ToArray());
}
}
return newTable;
}
然后我在一个单独的函数中调用它,如下所示:
private DataTable GetExtractData()
{
.........................
DataTable includeLastModified = new DataTable();
DataTable includeFunction = new DataTable();
DataTable includeDiscipline = new DataTable();
CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");
CloneTable(includeLastModified, includeFunction, customPropertiesTable, "Function", "ItemTitle", true, "Title", "Function");
CloneTable(includeFunction, includeDiscipline, customPropertiesTable, "Discipline", "ItemTable", true, "Title", "Discipline");
return includeDiscipline;
}
我遇到的问题是此处的数据表返回空,我不确定为什么。
在我的 CloneTable 函数中,我执行了以下操作以确保新的 table 不为空:
foreach (DataRow row in newTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.WriteLine(item);
}
}
它不是空的,所以我不确定为什么当我在一个单独的函数中返回它时它现在是空的?
我在 GetData 函数中为 includeDiscipline table 调用了同样的东西,但它返回为空。
没有错误,但有一条消息来来去去,说可以删除参数“newTable”,因为未使用初始值。我不确定这是怎么回事,因为它显然正在被使用?
我假设这可能是我调用函数的方式,但我真的不确定我在这里做错了什么
好吧,拍脸,才发现忘记给什么东西赋值了。
所以如果我做类似的事情:
var test = CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");
return test;
它工作正常,不再 returns 空
对于我的应用程序,有几个单独的数据表,我需要根据匹配的 ID 创建一个新的数据表。我必须多次执行该过程,所以我创建了一个函数,这样我就不会重复代码,我是这样做的:
private static DataTable CloneTable(DataTable originalTable, DataTable newTable, DataTable targetTable,
string addedColumn, string columnToExtract, bool multipleConditions = false, string secondColumnName = null, string secondColumnConditon= null)
{
newTable = originalTable.Clone();
newTable.Columns.Add(addedColumn);
foreach (DataRow row in originalTable.Rows)
{
DataRow[] rowsTarget;
if (multipleConditions == false)
{
rowsTarget = targetTable.Select(string.Format("ItemId='{0}'", Convert.ToString(row["ItemId"])));
} else
{
rowsTarget = targetTable.Select(string.Format("ItemId='{0}' AND {1} ='{2}'", Convert.ToString(row["ItemId"]), secondColumnName, secondColumnConditon));
}
if (rowsTarget != null && rowsTarget.Length > 0)
{
string data = rowsTarget[0][columnToExtract].ToString();
var lst = row.ItemArray.ToList();
lst.Add(data);
newTable.Rows.Add(lst.ToArray());
}
else
{
string data = "";
var lst = row.ItemArray.ToList();
lst.Add(data);
newTable.Rows.Add(lst.ToArray());
}
}
return newTable;
}
然后我在一个单独的函数中调用它,如下所示:
private DataTable GetExtractData()
{
.........................
DataTable includeLastModified = new DataTable();
DataTable includeFunction = new DataTable();
DataTable includeDiscipline = new DataTable();
CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");
CloneTable(includeLastModified, includeFunction, customPropertiesTable, "Function", "ItemTitle", true, "Title", "Function");
CloneTable(includeFunction, includeDiscipline, customPropertiesTable, "Discipline", "ItemTable", true, "Title", "Discipline");
return includeDiscipline;
}
我遇到的问题是此处的数据表返回空,我不确定为什么。 在我的 CloneTable 函数中,我执行了以下操作以确保新的 table 不为空:
foreach (DataRow row in newTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.WriteLine(item);
}
}
它不是空的,所以我不确定为什么当我在一个单独的函数中返回它时它现在是空的?
我在 GetData 函数中为 includeDiscipline table 调用了同样的东西,但它返回为空。
没有错误,但有一条消息来来去去,说可以删除参数“newTable”,因为未使用初始值。我不确定这是怎么回事,因为它显然正在被使用?
我假设这可能是我调用函数的方式,但我真的不确定我在这里做错了什么
好吧,拍脸,才发现忘记给什么东西赋值了。
所以如果我做类似的事情:
var test = CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");
return test;
它工作正常,不再 returns 空