0

私の目標は、バーンダウン チャートを作成することです。

次の関連フィールドを持つ障害オブジェクトがあります。

  • フォルトID
  • FaultCreationStartDate
  • FaultClosedDate

指定された2つの日付の間の日のリストを返すリストを作成しました

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();
4

2 に答える 2

2

次のようなものを使用できます。

var allFaults = i_Context.Faults.GetAllFaults();
var faults = 
  listOfDays.Select(d => new { Day = d.Date,
                               OpenFaults =
                                   allFaults.Count(f => f.FaultCloseDateTime >=
                                                           d.Date)
                             });
于 2013-04-05T10:52:36.070 に答える
1

多分私は何かを見ないかもしれませんが、それはただではありません:

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

しかし、私は言わなければなりません-そのクエリの一般的な考えは非常に非効率的です。

于 2013-04-05T10:51:54.593 に答える