C# LINQ中的日期范围重叠问题
表中特定记录的给定日期范围,如特定字段“名称” 如果有人试图在以前的日期范围内插入该名称,则不允许 我在这里试过一些代码看看这个C# LINQ中的日期范围重叠问题,c#,linq,C#,Linq,表中特定记录的给定日期范围,如特定字段“名称” 如果有人试图在以前的日期范围内插入该名称,则不允许 我在这里试过一些代码看看这个 if (dataContext.TableAs.Where( x => x.EndDate > StartDate && x.Name == Name).Count() == 0) { //insert record } 但并非总是成功的 有人能告诉我这里遗漏了什么吗 我已经在SQL中尝试了下面的查询,如何在LIN
if (dataContext.TableAs.Where(
x => x.EndDate > StartDate &&
x.Name == Name).Count() == 0)
{
//insert record
}
但并非总是成功的
有人能告诉我这里遗漏了什么吗
我已经在SQL中尝试了下面的查询,如何在LINQ中使用它来处理上面的代码
SELECT COUNT(*) FROM TableA WHERE ('2012-04-02' between StartDate and EndDate or '2012-08-28'
between StartDate and EndDate or StartDate between '2012-04-02' and '2012-08-28' or EndDatebetween '2012-04-02' and '2012-08-28' ) and Name='Test'
试试这个
if (dataContext.TableAs
.Where(x => x.Name == Name)
.Max(x => x.EndDate) < StartDate)
if(dataContext.TableAs)
.Where(x=>x.Name==Name)
.Max(x=>x.EndDate)
编辑-问题的第二部分
DateTime Date1 = new DateTime("2012-04-02");
DateTime Date2 = new DateTime("2012-08-28");
var query = (dataContext.TableAs
.Where(x => x.Name == "Test")
.Where(x => (x.StartDate >= Date1 && Date1 <= x.EndDate)
|| (x.StartDate >= Date2 && Date2 <= x.EndDate)
|| (Date1 >= x.StartDate && x.StartDate <= Date2)
|| (Date1 >= x.EndDate && x.EndDate <= Date2))).Count();
DateTime Date1=新日期时间(“2012-04-02”);
DateTime Date2=新的日期时间(“2012-08-28”);
变量查询=(dataContext.TableAs)
.Where(x=>x.Name==“测试”)
其中(x=>(x.StartDate>=Date1&&Date1=Date2&&Date2=x.StartDate&&x.StartDate=x.EndDate&&x.EndDatevar StartDate=new DateTime(2012,04,02);
var EndDate=新日期时间(2012,08,28);
var Name=“测试”;
如果(!dataContext.TableAs.Any)(
x=>x.Name==Name&&x.EndDate>=StartDate&&x.StartDate查看我对你问题第二部分的编辑你能澄清一下吗。如果存在两条记录Begin=2012-01-01,End=2012-01-31
和Begin=2012-03-01,End=2012-03-05
正在添加Begin=2012-02-01,End=2012-02-05
允许?是允许的,如果你考虑Begin=2012-01-05,End=2012-02-05则不允许这样做。在这种情况下,您可以将between子句简化为仅'2012-04-02'=StartDate
。然后查看我的答案,以获得相应的linqUseAny
,而不是Count
var StartDate = new DateTime(2012,04,02);
var EndDate = new DateTime(2012,08,28);
var Name = "Test";
if (!dataContext.TableAs.Any(
x=> x.Name == Name && x.EndDate >= StartDate && x.StartDate <= EndDate
)
{
//insert record
}