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
我无法编写 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