我使用LINQ从数据库表(Budgets)中选择具有如下结构的记录:
样本记录:
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
我还有一张图片来说明我的想法:
我的问题是:我不知道如何格式化LINQ来实现结果。所以请帮我在上面的例子中重新格式化我的LINQ。
答案 0 :(得分:2)
假设您的数据一致,EndDate
总是更大或等于StartDate
,您可以尝试这种方式:
Dim budgets = (From item In dc.Budgets _
Where item.StartDate > endDate Or item.EndDate < startDate
Select item)
上述查询应选择在给定endDate
之后开始或在给定startDate
之前结束的项目,换句话说,持续时间与给定持续时间不重叠的项目。