使用Linq / Lambda表达式将TimeSpan转换为数据表中的Double

时间:2015-04-24 19:13:40

标签: c# linq datatable

我想转换此DataTable

dt.Columns.Add(new DataColumn("timespan1", typeof(TimeSpan)));
dt.Columns.Add(new DataColumn("timespan2", typeof(TimeSpan)));

进入这个

dt.Columns.Add(new DataColumn("timespan1", typeof(double)));
dt.Columns.Add(new DataColumn("timespan2", typeof(double)));

我设法这样做了。

Double d;        

foreach (DataRow row in dt.Rows)
{
     dr = dtNew.NewRow();

     dr[0] = row.ItemArray[0];
     Double.TryParse(((TimeSpan)(row.ItemArray[1])).TotalMinutes.ToString(), out d);

     dr[1] = d;
     Double.TryParse(((TimeSpan)(row.ItemArray[2])).TotalMinutes.ToString(), out d);

     dr[2] = d;
     dtNew.Rows.InsertAt(dr, 0);
}

有没有办法使用Linq或lambda表达式?我想将此new <double> DataTable绑定到堆积条形图。感谢您的帮助。感谢。

1 个答案:

答案 0 :(得分:0)

你现在拥有的是正确的,除非你应该直接使用TotalMinutes而不将其转换为字符串,(如评论中提到的Jon Skeet)

LINQ用于查询数据,不应用于修改数据。带有foreach循环的当前代码很清楚,并传达了意图。

但如果您正在寻找LINQ语法,那么您可以这样做:

var dummyQuery = dt.AsEnumerable()
                .Select(dr => 
                dtNew.Rows.Add(dr.Field<TimeSpan>("timespan1").TotalMinutes,
                               dr.Field<TimeSpan>("timespan2").TotalMinutes))
                    .ToList();//To Iterate

这将填充来自两列的DataTabledtNew新值TotalMinutes

另一种选择是将您的查询结果投放到Select匿名类型,然后使用反射来创建DataTable

} $("#test").load("http://localhost:8888/projects/superfreerespo/" + id + "/ .gameBox-Ops");