过滤数据表并将结果复制到两个不同的数据表
Filtering DataTable and copying results to two different DataTables
我正在尝试通过returns DataTable 的某个列值(DateTime 类型)过滤结果并将它们插入到两个不同的 DataTable 中,如下所示:
var vAllItems = myClass.GetAllResults(x,y,z);
DataTable dtExpiredItems = new DataTable();
DataTable dtActiveItems = new DataTable();
var expiredItems = vAllItems.AsEnumerable().Where(r => r.Field<DateTime?>("ExpDate") <= DateTime.Now && r.Field<DateTime?>("ExpDate").HasValue);
var activeItems = vAllItems.AsEnumerable().Where(r => r.Field<DateTime?>("ExpDate") > DateTime.Now || !r.Field<DateTime?>("ExpDate").HasValue);
foreach(DataRow row in expiredItems)
dtExpiredItems.Rows.Add(row);
foreach (DataRow row in activeItems)
dtActiveItems.Rows.Add(row);
rptExpiredItems.DataSource = dtExpiredItems;
rptExpiredItems.Bind();
pchExpiredItems.Visible = dtExpiredItems.Rows.Count > 0;
rptActiveItems.DataSource = dtActivetItems;
rptActiveItems.Bind();
pchActiveItems.Visible = dtActiveItems.Rows.Count > 0;
事实是,在第二个 foreach 循环中出现以下错误:
This row already belongs to another table.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: This row already belongs to another table.
感谢任何帮助!谢谢!
一个 DataRow 只能属于一个 DataTable
,您应该根据给定的行值创建一个新行。
使用 DataRow
的 ItemArray
属性 获取值并将 object[]
作为输入传递以创建新行。
dtExpiredItems.Rows.Add(row.ItemArray);
或使用ImportRow
dtExpiredItems.ImportRow(row);
另一种选择是使用 CopyToDataTable
(DataTable) 扩展从 Linq
输出创建新的 table,然后使用新的 table 进行绑定。
dtExpiredItems = expiredItems.CopyToDataTable<DataRow>();
您在哪里进行以下操作
dtExpiredItems.Rows.Add(row);
dtActiveItems.Rows.Add(row);
你可以改为
dtExpiredItems.ImportRow(row);
dtActiveItems.ImportRow(row);
我正在尝试通过returns DataTable 的某个列值(DateTime 类型)过滤结果并将它们插入到两个不同的 DataTable 中,如下所示:
var vAllItems = myClass.GetAllResults(x,y,z);
DataTable dtExpiredItems = new DataTable();
DataTable dtActiveItems = new DataTable();
var expiredItems = vAllItems.AsEnumerable().Where(r => r.Field<DateTime?>("ExpDate") <= DateTime.Now && r.Field<DateTime?>("ExpDate").HasValue);
var activeItems = vAllItems.AsEnumerable().Where(r => r.Field<DateTime?>("ExpDate") > DateTime.Now || !r.Field<DateTime?>("ExpDate").HasValue);
foreach(DataRow row in expiredItems)
dtExpiredItems.Rows.Add(row);
foreach (DataRow row in activeItems)
dtActiveItems.Rows.Add(row);
rptExpiredItems.DataSource = dtExpiredItems;
rptExpiredItems.Bind();
pchExpiredItems.Visible = dtExpiredItems.Rows.Count > 0;
rptActiveItems.DataSource = dtActivetItems;
rptActiveItems.Bind();
pchActiveItems.Visible = dtActiveItems.Rows.Count > 0;
事实是,在第二个 foreach 循环中出现以下错误:
This row already belongs to another table.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: This row already belongs to another table.
感谢任何帮助!谢谢!
一个 DataRow 只能属于一个 DataTable
,您应该根据给定的行值创建一个新行。
使用 DataRow
的 ItemArray
属性 获取值并将 object[]
作为输入传递以创建新行。
dtExpiredItems.Rows.Add(row.ItemArray);
或使用ImportRow
dtExpiredItems.ImportRow(row);
另一种选择是使用 CopyToDataTable
(DataTable) 扩展从 Linq
输出创建新的 table,然后使用新的 table 进行绑定。
dtExpiredItems = expiredItems.CopyToDataTable<DataRow>();
您在哪里进行以下操作
dtExpiredItems.Rows.Add(row);
dtActiveItems.Rows.Add(row);
你可以改为
dtExpiredItems.ImportRow(row);
dtActiveItems.ImportRow(row);