获取没有被其他期间覆盖的期间

Get periods without cover by another periods

我有如下所示的 Db 实体:

TimeEntity {
 public DateFrom {get; set;}
 public DateTo {get; set;}
}

有些活动是一项一项的,但有时会出现休息的情况。 没有 activity 时如何获取经期? 如何通过linq做到这一点?我必须从数据库获取所有活动并自己完成吗?

谢谢!

这个查询应该return个空白。

var withoutAdjacent = 
    from p in ctx.Periods
    where !ctx.Periods.Any(p2 => p2.DateFrom == p.DateTo) && ctx.Periods.Any(p2 => p2.DateFrom > p.DateTo)
    select p;

var gapPeriods =
    from p in withoutAdjacent
    select new TimeEntity
    {
        DateFrom = p.DateTo,
        DateTo = ctx.Periods.Where(p2 => p2.DateFrom > p.DateTo).Min(p2 => DateFrom)
    };