1

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

  • 2012-09-01
  • 2012-09-02
  • 2012-09-03
  • 2012-09-04
  • 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.
4

2 回答 2

2

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

create table Dates (
 Date DATE NOT NULL PRIMARY KEY
)

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

该表上的聚簇索引可以快速选择所有可能日期的一小部分子范围。

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

我还要提一下在您的应用程序代码中填写缺失日期的可能性。我认为这取决于您的确切情况,这是否更好。特别是如果您希望连接的结果用于进一步的服务器端处理,您可能需要一个日期表。

于 2012-09-27T09:46:20.407 回答
0

首先,听起来您只需要一个类似以下内容的where子句:

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

您将在其中进行endDate独家绑定(例如 9 月 6 日午夜),以捕获“9 月 5 日期间”的任何日期/时间值

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

于 2012-09-27T09:45:12.710 回答