选择持续时间为StartDate和EndDate的记录,这些记录未被给定的StartDate和EndDate的持续时间覆盖

时间:2016-03-30 05:02:54

标签: vb.net linq

我使用LINQ从数据库表(Budgets)中选择具有如下结构的记录:

  • ID 整数 自动增加
  • BudgetName VarChar
  • StartDate DateTime
  • EndDate DateTime

样本记录:

ID      BudgetName          StartDate                       EndDate
1       budget              2016-03-14 04:33:09.737         2016-04-13 04:33:09.737

我的VB代码说明了我的想法“选择具有StartDate和EndDate持续时间的记录,这些记录未被给定的StartDate和EndDate的持续时间覆盖”:

Dim startDate = DateTime.Today
Dim endDate = DateTime.Today.AddMonths(1).AddDays(1).AddSeconds(-1)
Dim budgets = (From item In dc.Budgets _
                Where Duration Of item.StartDate And item.StartDate Is Not Covered By Duration Of startDate And endDate _
                Select item)

'Note: Budgets is a System.Data.Linq.Table

我还有一张图片来说明我的想法:

Select records that have duration of StartDate and EndDate that not covered by Duration of given StartDate and EndDate

我的问题是:我不知道如何格式化LINQ来实现结果。所以请帮我在上面的例子中重新格式化我的LINQ。

1 个答案:

答案 0 :(得分:2)

假设您的数据一致,EndDate总是更大或等于StartDate,您可以尝试这种方式:

Dim budgets = (From item In dc.Budgets _
                Where item.StartDate > endDate Or item.EndDate < startDate
                Select item)

上述查询应选择在给定endDate之后开始或在给定startDate之前结束的项目,换句话说,持续时间与给定持续时间不重叠的项目。