C# 如何计算datatable上状态之间的天数

C# 如何计算datatable上状态之间的天数,c#,C#,我有一个带有请求步骤历史记录的数据表 以下是数据示例: 我需要在天上放置每个状态之间的间隔天数 当然,如果只有一种状态,那么天数应该是交易日和今天日期之间经过的天数 有什么线索吗?这可能有助于您解决问题: 遍历集合,从当前行中减去前一行的日期列值。TotalDays()将返回一个双精度值,指示日差。这可以通过以下方式实现: var temTable = myDatatable.AsEnumerable().Select(x => x).ToList(); for (int i = 0;

我有一个带有请求步骤历史记录的数据表

以下是数据示例:

我需要在天上放置每个状态之间的间隔天数

当然,如果只有一种状态,那么天数应该是交易日和今天日期之间经过的天数


有什么线索吗?

这可能有助于您解决问题: 遍历集合,从当前行中减去前一行的日期列值
。TotalDays()
将返回一个双精度值,指示日差。这可以通过以下方式实现:

var temTable = myDatatable.AsEnumerable().Select(x => x).ToList();
for (int i = 0; i < temTable.Count; i++)
{
    double days = 0;
    if (i != 0)
        days = ((DateTime)temTable[i]["date"] - (DateTime)temTable[i - 1]["date"]).TotalDays;
    temTable[i]["days"] = days;

}
var temTable=myDatatable.AsEnumerable().Select(x=>x.ToList();
对于(int i=0;i
我相信,Sql Server中的上述查询将提供所需的输出。 但要使用新列“days”更新表,需要一些额外的/其他代码。我还在努力。如果你得到解决方案,请张贴。。。 我没有把时间考虑进去。。。。。。你也加上。。。。 您可以使用datetime类型的字段(替换日期和小时),这将降低风险

 WITH newTable AS (
SELECT dStatus,ABS(DATEDIFF(
DAY,LAG(dDate,1,GETDATE()) 
OVER (ORDER BY dDate),dDate)) AS dDays FROM tbData
)
UPDATE tbData SET dDays=nt.dDays
FROM newTable nt
WHERE nt.dStatus = tbData.dStatus;
我相信这会解决你的问题。。。。。
不考虑小时字段…..谢谢….

您想用C#还是SQL来完成?在C#中,SQL也会非常好,为什么不只是一个
for
循环,并处理数组的
索引不足的情况呢。除非您的状态与您在船上所做的事情相关,否则它的
已付款
,而不是
已付款
。选择dDate、dHour、dStatus、DATEDIFF(DAY、LAG(dDate、1、GETDATE())OVER(ORDER BY dDate)、dDate)作为从tbData开始的天数;=>给出了类似的结果
 WITH newTable AS (
SELECT dStatus,ABS(DATEDIFF(
DAY,LAG(dDate,1,GETDATE()) 
OVER (ORDER BY dDate),dDate)) AS dDays FROM tbData
)
UPDATE tbData SET dDays=nt.dDays
FROM newTable nt
WHERE nt.dStatus = tbData.dStatus;