我有一件物品:
class Item {
DateTime Start {get;set;}
DateTime End {get;set;}
}
在开始和结束的日子,例如:
09/08/2013
我需要列出以下内容:
(DateTime x - how many items with Start >x and End < x)
我可以这样做:
list(DateTime x, int HowMany) results
dayZero = Earliest start day
dayFinal = Latest end day
for (currentDay : dayZero to dayFinal)
put (currentDay,Get How Many Items with start>currentDay, end<currentDay)
但是问题是项目分散在时间上,我将计算很多天的项目数,而总项目数没有变化。
我认为最好的解决方案是仅在商品的最初和最后几天进行迭代,但是提高性能的最佳方法是什么?
我正在使用linq,所以我有:
protected readonly OL4RENTDb _context;
IQueryable<T> query = _context.Set<Item>();
query.Where <- ????
最佳答案
Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset=>new {
day=start.AddDays(offset),
count=Items.Count(i=>i.Start<start.AddDays(offset) &&
i.End>start.AddDays(offset)});
考虑到开始日期=开始日期,结束日期=结束日期,我认为应该起作用,Items是Item的集合。
关于c# - 按日期列出项目数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17005419/