使用 Linq/Lambda 表达式将数据表中的 TimeSpan 转换为 Double
Convert TimeSpan to Double in Datatable using Linq / Lambda expression
我想转换这个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
绑定到堆积条形图。感谢你的帮助。谢谢。
你现在拥有的是正确的,除了你应该直接使用 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
这将使用两列中的 TotalMinutes
值填充新的 DataTable
、dtNew
。
另一种选择是将 Select
中的查询结果投影到匿名类型,然后使用反射创建 DataTable
,例如 Fastest way to fill DataTable from LINQ query using DataContext
我想转换这个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
绑定到堆积条形图。感谢你的帮助。谢谢。
你现在拥有的是正确的,除了你应该直接使用 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
这将使用两列中的 TotalMinutes
值填充新的 DataTable
、dtNew
。
另一种选择是将 Select
中的查询结果投影到匿名类型,然后使用反射创建 DataTable
,例如 Fastest way to fill DataTable from LINQ query using DataContext