关于c#3.0:可以使用Lambda表达式填充数据表(C#3.0)

 2020-07-04 

Is is possible to populate a datatable using a Lambda expression(C#3.0)

我有一个数据表。 我正在其中填充一些值。
例如

1
2
3
4
5
6
7
8
9
DataTable dt =new DataTable();
dt.Columns.Add("Col1",typeof(int));
dt.Columns.Add("Col2",typeof(string));
dt.Columns.Add("Col3",typeof(DateTime));
dt.Columns.Add("Col4",typeof(bool));


for(int i=0;i< 10;i++)
dt.Rows.Add(i,"String"  + i.toString(),DateTime.Now,(i%2 == 0)?true:false);

这个程序没有错,可以给我预期的输出。

但是,最近,我正在学习Lambda,并且已经学习了一些基础知识。

因此,我试图做与下相同的事情

1
2
3
4
5
Enumerable.Range(0,9).Select(i = >
{

    dt.Rows.Add(i,"String"  + i.toString(),DateTime.Now,(i%2 == 0)?true:false);
});

但是我没有成功。

我的方法是正确的吗(是的,我知道我遇到了编译时错误;因为到目前为止对此主题的知识还不够)?

我们能以我的方式实现这一目标是一个很大的疑问(我不知道..只是试一试)。

如果是这样,有人可以在这方面帮助我。

我正在使用C#3.0和dotnet framework 3.5

谢谢


Select方法返回可枚举的延迟执行。 要使可枚举执行,必须枚举它。 另外-dt.Rows.Add返回void,因此它是一个Action,而不是Func,并且不能在Select调用中使用。

而不是使用选择,如何使用

1
ToList< T >().ForEach< T >(Action< T >)

如:

1
2
3
4
5
6
Enumerable.Range(0,9)
  .ToList()
  .ForEach(i =>  
  {
    dt.Rows.Add(i,"String"  + i.ToString(), DateTime.Now, (i%2 == 0) );
  });

你很亲密 只需除去{大括号}和" = >"中的空格。

1
2
Enumerable.Range(0, 9).Select(i => dt.Rows.Add(i,
   "String" + i.ToString(), DateTime.Now, (i%2 == 0) ? true : false));