【问题标题】:Is is possible to populate a datatable using a Lambda expression(C#3.0)是否可以使用 Lambda 表达式填充数据表(C#3.0)
【发布时间】:2010-05-03 03:33:03
【问题描述】:

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

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,做了一些基础知识。

我试图做和下面一样的事情

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

谢谢

【问题讨论】:

    标签: c#-3.0


    【解决方案1】:

    你很亲密。只需删除 {curly 大括号} 和“= &gt;”中的空格即可。

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

    【讨论】:

    • 使用 LINQ 的任何其他方式
    【解决方案2】:

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

    不使用Select,不如使用

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

    如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2017-04-19
      • 2014-09-12
      • 2015-05-26
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多