【发布时间】:2015-05-31 15:03:15
【问题描述】:
我正在尝试从List<T> 填充.NET 4.5 DataTable,其中T 是一个具有string 类型属性的类。
我有一个函数makeNewDataTable(),它创建一个DataTable 实例并向其中添加一组列;这部分工作正常。
当我手动迭代列表时,正确的行数(包含正确的数据)被添加到 DataTable:
DataTable dataTable = makeNewDataTable();
if (inputList != null)
{
//inputList.Select(item => dataTable.Rows.Add(item.Property, DBNull.Value));
foreach (var item in inputList)
{
dataTable.Rows.Add(item.Property, DBNull.Value);
}
}
但是,如果我尝试在同一端使用 lambda 表达式:
DataTable dataTable = makeNewDataTable();
if (inputList != null)
{
inputList.Select(item => dataTable.Rows.Add(item.Property, DBNull.Value));
//foreach (var item in inputList)
//{
// dataTable.Rows.Add(item.Property, DBNull.Value);
//}
}
然后在if 语句结束后} 我看到dataTable.Rows.Count == 0。
当手动编码的 foreach 循环工作正常时,为什么我在使用 lambda 表达式时看不到已添加的行?
奖励问题:有没有办法使用更简洁的 lambda 表达式语法而不是手动编写 foreach 循环来做我想做的事情?
【问题讨论】:
-
第二个是返回一个数据表对象列表,但没有分配给任何东西。如果您要执行“var table = inputList.Select....”,那么对行计数会发生什么?
-
@StevenWood 我不确定这是否适用,因为
.Select()表达式从每个项目映射到函数调用以将行添加到在 lambda 表达式之外定义的dataTable.或者至少那是我认为它会做的,但代码显然没有完全符合我的意图。完整的.Select()语句在这里没有返回任何有意义的内容。
标签: c# lambda datatable ado.net