2013-04-05 32 views
0

我的目標是創建燃盡圖。如何編寫lambda表達式來創建燃盡圖

我有以下相關領域的故障對象:

  • FaultID
  • FaultCreationStartDate
  • FaultClosedDate

我已創建返回給定的兩個日期之間的天的列表清單

List<DateTime> listOfDays = new List<DateTime>(); 
     int lastDayOfMonth = DateTime.DaysInMonth(i_Date.Year, i_Date.Month); 

     for (int i = 1; i <= lastDayOfMonth; i++) 
     { 
      listOfDays.Add(new DateTime(DateTime.Now.Year, 
            DateTime.Now.Month, i)); 
     } 

現在我想要在每天獲得打開的故障數量,這意味着它們還沒有關閉。

基本上FaultClosedDate應>比相關day

我已經創造了一些LINQ表達式,但樂隊內部聯接,而不是左的連接。

我想所有天月和計算都在這一天

var tryfaults = listOfDays.SelectMany(d => i_Context.Faults.GetAllFaults() 
       .Where(f=> f.FaultCloseDateTime >= d.Date), (d, f) => new 
       { 
        Date = d.Date, 
        Open = f.FaultID 
       }).GroupBy(d => d.Date).Select(d => new 
        { 
         Date = d.Key.Date, 
         Open = d.Count() 
        }).ToList(); 

回答

2

您可以使用類似的東西:

var allFaults = i_Context.Faults.GetAllFaults(); 
var faults = 
    listOfDays.Select(d => new { Day = d.Date, 
           OpenFaults = 
            allFaults.Count(f => f.FaultCloseDateTime >= 
                  d.Date) 
          }); 
+0

謝謝!我不知道爲什麼我的蜿蜒難解決 – Silagy 2013-04-05 10:57:13

1

也許我看不到的東西打開的故障,但不只是:

var tryfaults = listOfDays.Select(d => new { 
        Date = d.Date, 
        Open = i_Context.Faults.GetAllFaults().Where(f=> f.FaultCloseDateTime >= d.Date).Count()) 
       }).ToList(); 

但是我不得不說 - 你對這個查詢的一般想法是非常低效的。