2013-04-04 14 views
0

我的数据在下面的格式列出的,(该时间值是相同的,用于样品)使用LINQ C#以计算MTBF

ID Result  StartTime    EndTime 
1 Fail 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
2 Fail 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
3 Pass 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
4 Fail 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
5 Fail 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
6 Pass 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
7 Fail 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
8 Pass 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
9 pass 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 
10 pass 4/2/2013 1:17:29 PM  4/2/2013 1:19:30 PM 

我必须找到MTBF此使用Σ(T1, T2,... Tn)/ n其中n是故障的数目,T1,T2,... Tn是指发生故障之前的正常运行时间。截至目前,我已经能够计算所经过的时间每次迭代,

using (DatabaseEntities entities = new DatabaseEntities()) 
{ 
    var result = entities.ExecutionDetails.Select(p => p); 
    foreach (var p in result) 
    { 
     if (p.StartTime.HasValue && p.EndTime.HasValue) 
     { 
      var duration = (p.EndTime.Value - p.StartTime.Value).ToString("c"); 
      Console.WriteLine("Duration" + duration); 
     } 
    } 
} 

你能帮我找到正确的方法和查询使用捕捉相关数据,以便计算MTBF。 谢谢。

更新的代码

var results = entities.TestExecutionDetails.ToList(); 

      var failures = results.Where(p => p.Result == "Fail").Select(p => p); 

      foreach(var p in failures) 
      { 
      if (p.StartTime.HasValue && p.EndTime.HasValue) 
      { 

       var elapsedduration = elapsedduration + (p.EndTime.Value - p.StartTime.Value).ToString("c"); 

      } 

      var mtbf = elapsedduration/failures.Count(); 

最后更新

  TimeSpan elaspsedduration = new TimeSpan(0); 
      ........ 
       ..... 
      foreach (var p in uptime) 
      { 
       Console.WriteLine("Uptime is" + uptime); 
       if (p.StartTime.HasValue && p.EndTime.HasValue) 
       { 
        elaspsedduration += (p.EndTime.Value - p.StartTime.Value); 
       } 
      var mtbf = elaspsedduration.TotalSeconds/failures; 

      Console.WriteLine("MTBF Value is " + mtbf); 
+0

MTBF:平均故障间隔时间? – 2013-04-04 12:01:02

+0

是的,平均故障间隔时间 – Archer 2013-04-05 04:51:36

回答

1

我认为,类似这样的事情可能会做这项工作。

var results = entities.ExecutionDetails.ToList(); 

var failures = results.Where(p => p.Result == "Fail"); 

var sigmaDiff = failures.Sum(p => p.EndTime.Subtract(p.StartTime)); 

var mtbf = sigmaDiff/failures.Count(); 
+0

感谢您的回答。根据您的意见,我修改了代码。你能否帮我解决我现在得到的错误,“在声明它之前,不能使用局部变量已用的持续时间。” – Archer 2013-04-05 07:14:04

+0

听起来像变量'elapsed_duration'还没有被声明或初始化。这个变量是否存在于你的方法中,并且你给了它一个值? – chead23 2013-04-05 08:12:30

+0

我需要找到时间差的总和,那就是我想要做的,如果我在开始时设置了var elapsedduration = 0,我得到了exceptio,DbArithmetic表达式参数必须有数字通用类型。 – Archer 2013-04-05 09:41:19