我希望创建一个LINQ查询,该查询将生成包含一系列日期的结果集。我想给它2012-09-01和2012-09-05,它应该返回一个包含:
的结果集我想要这个,因为我希望在后续查询的连接中使用它,可能不包含所有日期。但是,我希望最终结果包含间隔中的所有日期,无论其他任何查询是否返回任何结果。
我使用LINQ to Entities。
作为一个真实的例子,它可能看起来像这样:
from p in projects
where p.StartDate > dateFrom && p.StartDate < dateTo
// somehow 'select' every date between dateFrom and dateTo,
// so you get one row in the resultset for each date in between.
答案 0 :(得分:2)
最简单的方法是创建一个Dates
表:
create table Dates (
Date DATE NOT NULL PRIMARY KEY
)
并适当填写。 T-SQL没有数组或生成器函数。
此表上的聚集索引可以快速选择所有可能日期的小子范围。
您还可以添加更多列,例如DayOfWeek TINYINT NOT NULL
,IsHoliday BIT NOT NULL
,......非常方便。
我还要提一下填写申请代码中缺少日期的可能性。我认为这取决于你的确切情况,如果这样做更好或没有。特别是如果您希望将连接结果用于进一步的服务器端处理,则可能需要一个日期表。
答案 1 :(得分:0)
首先,听起来你只想要一个where
条款:
where foo.Date >= startDate && foo.Date < endDate
您可以endDate
独占绑定(例如9月6日午夜),以便捕获“9月5日”期间的任何日期/时间值。
然后您可以按日期对结果进行分组...我会在.NET中进行后处理(在LINQ to Objects中)来处理没有结果的日期。这可能比在实体框架代码中尝试这样做要简单得多。