C#Linq-查找冲突时间
我以为这很简单,但我有“大脑迷雾” 情景: 客户希望在那里预订下一个约会,从2020年12月10日16:00(开始)到2020年12月10日17:00(结束) 工作人员需要确定他们是否有空闲时间? (下次免费预约时间为17:00-18:00) 我希望能够: 但是,我还需要记住,如果一个约会在17:00结束,而下一个约会可能在17:00到18:00开始,那么这个时间不会被视为不可用 这就是我到目前为止所做的,但我总是得到错误的结果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
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开始的约会相匹配,这不是我想要的。我已经为答案添加了证据非常感谢:)非常感谢:)