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,我以为这很简单,但我有“大脑迷雾” 情景: 客户希望在那里预订下一个约会,从2020年12月10日16:00(开始)到2020年12月10日17:00(结束) 工作人员需要确定他们是否有空闲时间? (下次免费预约时间为17:00-18:00) 我希望能够: 但是,我还需要记住,如果一个约会在17:00结束,而下一个约会可能在17:00到18:00开始,那么这个时间不会被视为不可用 这就是我到目前为止所做的,但我总是得到错误的结果 public IEnumerable<DomainObje

我以为这很简单,但我有“大脑迷雾”

情景: 客户希望在那里预订下一个约会,从2020年12月10日16:00(开始)到2020年12月10日17:00(结束)

工作人员需要确定他们是否有空闲时间? (下次免费预约时间为17:00-18:00)

我希望能够: 但是,我还需要记住,如果一个约会在17:00结束,而下一个约会可能在17:00到18:00开始,那么这个时间不会被视为不可用

这就是我到目前为止所做的,但我总是得到错误的结果

 public IEnumerable<DomainObjects.Event> FindAllEventsByUserId(string userId, DateTime startTime, DateTime endTime)
        {
            var appointments =
                RepositorySet
                    .Where(c => c.ResourceId == userId && !c.IsDeleted &&
                                (
                                    (c.StartTime >= startTime && c.StartTime <= endTime) ||
                                    (c.EndTime >= startTime && c.EndTime <= endTime) ||
                                    (c.StartTime <= startTime && c.EndTime >= endTime))
                    ).AsEnumerable();
public IEnumerable FindAllEventsByUserId(字符串用户ID、日期时间开始时间、日期时间结束时间)
{
var任命=
存储集
其中(c=>c.ResourceId==userId&&!c.IsDeleted&&
(

(c.StartTime>=StartTime&&c.StartTime=StartTime&&c.EndTime如果一个StartTime在其他EndTime之前,而该EndTime在其他StartTime之后,则存在重叠

如果要在留给您的时间段内返回冲突条目,请执行以下操作:

public IEnumerable<DomainObjects.Event> FindAllEventsByUserId(string userId, DateTime startTime, DateTime endTime)
{
    var appointments =
        RepositorySet
            .Where(c => c.ResourceId == userId && !c.IsDeleted &&
                c.StartTime < endTime && c.EndTime > startTime
            ).AsEnumerable();
}
public IEnumerable FindAllEventsByUserId(字符串用户ID、日期时间开始时间、日期时间结束时间)
{
var任命=
存储集
其中(c=>c.ResourceId==userId&&!c.IsDeleted&&
c、 开始时间StartTime
).AsEnumerable();
}
证明:

var time1start = new DateTime(2020, 12, 10, 16, 0, 0);
var time1end = new DateTime(2020, 12, 10, 17, 0, 0);

var time2start = new DateTime(2020, 12, 10, 17, 0, 0);
var time2end = new DateTime(2020, 12, 10, 18, 0, 0);

var time3start = new DateTime(2020, 12, 10, 16, 30, 0);
var time3end = new DateTime(2020, 12, 10, 17, 30, 0);

Console.WriteLine(time1start < time2end && time1end > time2start); // false (correct)
Console.WriteLine(time1start < time3end && time1end > time3start); // true (corrent)
Console.WriteLine(time1start <= time2end && time1end >= time2start); // true (wrong)
var time1start=newdatetime(2020,12,10,16,0,0);
var time1end=新日期时间(2020、12、10、17、0、0);
var time2start=新的日期时间(2020、12、10、17、0、0);
var time2end=新的日期时间(2020、12、10、18、0、0);
var time3start=新日期时间(2020、12、10、16、30、0);
var time3end=新日期时间(2020、12、10、17、30、0);
Console.WriteLine(time1starttime2start);//false(正确)
Console.WriteLine(time1starttime3start);//true(corrent)
Console.WriteLine(time1start=time2start);//真(错)

如果一个开始时间在其他结束时间之前,而该结束时间在其他开始时间之后,则存在重叠

如果要在留给您的时间段内返回冲突条目,请执行以下操作:

public IEnumerable<DomainObjects.Event> FindAllEventsByUserId(string userId, DateTime startTime, DateTime endTime)
{
    var appointments =
        RepositorySet
            .Where(c => c.ResourceId == userId && !c.IsDeleted &&
                c.StartTime < endTime && c.EndTime > startTime
            ).AsEnumerable();
}
public IEnumerable FindAllEventsByUserId(字符串用户ID、日期时间开始时间、日期时间结束时间)
{
var任命=
存储集
其中(c=>c.ResourceId==userId&&!c.IsDeleted&&
c、 开始时间StartTime
).AsEnumerable();
}
证明:

var time1start = new DateTime(2020, 12, 10, 16, 0, 0);
var time1end = new DateTime(2020, 12, 10, 17, 0, 0);

var time2start = new DateTime(2020, 12, 10, 17, 0, 0);
var time2end = new DateTime(2020, 12, 10, 18, 0, 0);

var time3start = new DateTime(2020, 12, 10, 16, 30, 0);
var time3end = new DateTime(2020, 12, 10, 17, 30, 0);

Console.WriteLine(time1start < time2end && time1end > time2start); // false (correct)
Console.WriteLine(time1start < time3end && time1end > time3start); // true (corrent)
Console.WriteLine(time1start <= time2end && time1end >= time2start); // true (wrong)
var time1start=newdatetime(2020,12,10,16,0,0);
var time1end=新日期时间(2020、12、10、17、0、0);
var time2start=新的日期时间(2020、12、10、17、0、0);
var time2end=新的日期时间(2020、12、10、18、0、0);
var time3start=新日期时间(2020、12、10、16、30、0);
var time3end=新日期时间(2020、12、10、17、30、0);
Console.WriteLine(time1starttime2start);//false(正确)
Console.WriteLine(time1starttime3start);//true(corrent)
Console.WriteLine(time1start=time2start);//真(错)

这基本上是检查两个间隔是否重叠,类似于1D线。但是,端点重叠是不可接受的,因此我们需要专门化一点

让我们将其抽象为AB和CD的两个区间,其中A和C表示开始,B和D表示结束

间隔何时重叠?或者:

  • A=D(AB是CD的超集(或等价物)
  • A>=C和A
  • B>C和B=C&&AC&&B=startTime&&C.startTime||(c.EndTime>startTime&&c.EndTime这基本上是检查两个间隔是否重叠,类似于1D线。但是,端点重叠是不可接受的,因此我们需要专门化一点

    让我们将其抽象为AB和CD的两个区间,其中A和C表示开始,B和D表示结束

    间隔何时重叠?或者:

  • A=D(AB是CD的超集(或等价物)
  • A>=C和A
  • B>C和B=C&&AC&&B=startTime&&C.startTime||(c.EndTime>startTime&&c.EndTime我同意,只有相应地它应该是“=”(因为即使上一次会议在同一时间结束,会议也可以在17:00开始)不,我只是测试了一下,如果你使用
    =
    ,那么11:00结束的约会将与11:00开始的约会相匹配,这不是我想要的。我已经在回答中添加了证据。我同意,只是它应该是“=”(因为即使上一次会议在同一时间结束,会议也可以在17:00开始)不,我刚刚测试过,如果你使用
    =
    ,那么11:00结束的约会将与11:00开始的约会相匹配,这不是我想要的。我已经为答案添加了证据非常感谢:)非常感谢:)