0

我的目标是创建一个燃尽图。

我有一个包含以下相关字段的故障对象:

  • 故障ID
  • 故障创建开始日期
  • 故障关闭日期

我创建了一个列表,它返回两个给定日期之间的日期列表

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 回答