2013-04-04 62 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