LINQ选择一个日期范围来加入其他查询

时间:2012-09-27 09:43:26

标签: linq entity-framework linq-to-entities

我希望创建一个LINQ查询,该查询将生成包含一系列日期的结果集。我想给它2012-09-01和2012-09-05,它应该返回一个包含:

的结果集
  • 2012-09-01
  • 2012-08-30
  • 2012-09-03
  • 2012年9月4日
  • 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.

2 个答案:

答案 0 :(得分:2)

最简单的方法是创建一个Dates表:

create table Dates (
 Date DATE NOT NULL PRIMARY KEY
)

并适当填写。 T-SQL没有数组或生成器函数。

此表上的聚集索引可以快速选择所有可能日期的小子范围。

您还可以添加更多列,例如DayOfWeek TINYINT NOT NULLIsHoliday BIT NOT NULL,......非常方便。

我还要提一下填写申请代码中缺少日期的可能性。我认为这取决于你的确切情况,如果这样做更好或没有。特别是如果您希望将连接结果用于进一步的服务器端处理,则可能需要一个日期表。

答案 1 :(得分:0)

首先,听起来你只想要一个where条款:

where foo.Date >= startDate && foo.Date < endDate

您可以endDate 独占绑定(例如9月6日午夜),以便捕获“9月5日”期间的任何日期/时间值。

然后您可以按日期对结果进行分组...我会在.NET中进行后处理(在LINQ to Objects中)来处理没有结果的日期。这可能比在实体框架代码中尝试这样做要简单得多。