LINQ 计算 X 天之前或同一天创建的项目

LINQ count items created before or the same day past X days

我无法编写 LINQ 查询来计算 X 天之前或同一天创建的项目。

我有以下 table Items:

id   dateline (timestamp)  lastactivity  status   
-----------------------------------------------------
1    1448395260            1448395260    done    
2    1448308860            1448308999    in_progress
3    1448308860            1448395260    done
4    1448222460            1448395260    done
5    1448395260            1448395260    in_progress

我正在尝试编写 LINQ 查询以获取过去 X 天每天创建和现有 in_progress 项的数量。
如果项目 dateline <= DAY_END (23:59:59) AND (status != 'done' OR lastactivity >= DAY_START (00:00:00)).
如果项目的日期线早于特定日期并且当天关闭则必须计算在内。

根据上面的 table 项,预期结果应该是这样的:

day           not_done_items_count
-----------------------------------
1448409599    5
1448323199    3
1448236799    1

(对于 day 值,我使用了 DAY_END 时间戳。)

我当前的 LINQ 查询如下所示:

var itemsPerDay = (from item in items
                   from i in Enumerable.Range(0, totalDays)
                   let dayStart = start.AddDays(i).ToUnixTimestamp()
                   let nextDay = start.AddDays(i).NextDay().ToUnixTimestamp()
                   where (item.dateline < nextDay
                       && (!item.status.Equals("done") || t.lastactivity >= dayStart)
                   select new { day = nextDay - 1 }
                  ).ToList();

var results = itemsPerDay.DistinctBy(t => t.day).Select(
    t => new OpenedItemsPerDay
    {
        day = t.day,
        count = itemsPerDay.Count(v => v.day == t.day)
    }).AsQueryable();

上面的代码执行得太慢了,我不确定这是否是我正在尝试做的事情的正确方法。

我也尝试过分组,但卡住了:如果该项目是较早创建的,那么 DAY_X 并且它的状态更改为完成,例如在我只能将其与一个组(天)关联后的 2 天,我数不过来两次或更多

为什么不用groupby? (不在 vs 前面,所以请原谅语法)

var d1 = datetime.now.adddays(-5).ToUnixTimestamp()
var d2= DateTime.Now.ToUnixTimestamp();

var grouppeditems = (for item in items
where item.lastactivity <= d2 && item.dateline >= d1 && (!item.status.Equals("done")
select item).GroupBy(gb=>gb.lastactivity)

foreach (var item in grouppeditems )
 Console.WriteLine ( item.Title + " " +  item.Count);

//可能想按这样的方式在同一天分组 (d2-gb.lastactivity)/86400