Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ中的日期范围重叠问题_C#_Linq - Fatal编程技术网

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.EndDate
var 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
。然后查看我的答案,以获得相应的linqUse
Any
,而不是
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
}