查询后如何确定哪些SQL条目丢失?

时间:2013-02-19 08:50:56

标签: c# sql-server linq entity-framework

给出以下数据库结构并使用EntityFramework。

enter image description here

每五分钟,'phasecount'表获取'Phase'中每条记录的记录。

using (Entities db = new Entities())
{
    db.ContextOptions.LazyLoadingEnabled = false;

    int numberofcontrollers = (from a in db.Junctions select a).Count();
    List<int> controllerids = (from b in db.Junctions select b.Id).ToList();

    var configuration = (from c in db.Configurations select c).First();

    DateTime laststamp = (from s in db.Stamps select s.Time).Max();
    DateTime firststamp = laststamp.AddMinutes(-1 * (CountIntervalsBefore - 1) * TimeSliceLength);

    var stamps = from s in db.Stamps.Include("PhaseCounts.Phase") where s.Time >= firststamp && s.Time <= laststamp orderby s.Id select s;
    // check consistency; number of stamps should equal timeslices*controllers

    if (stamps.Count() != CountIntervalsBefore * numberofcontrollers)
    {
         //counts are not available for all timeslices and controllers
         //do extended consistency check (and use dummy data?)
    }
}

我想为所有阶段选择每个阶段的一个小时。

标记通常等于72,即12个5分钟的切片* 6个连接点。

如果它不等于72,如何确定哪些阶段和哪些时间戳丢失数据?

1 个答案:

答案 0 :(得分:0)

我对解决方案的初步想法;这可能不是最佳搜索方法,但它应该有效。

获取组中最早的时间戳,并检查您确实拥有具有该时间戳的正确记录数(从您所说的,我相信这是6)。从那你可以判断这个集合中是否有任何遗漏。然后查找与当前时间戳最接近的时间戳。如果它大约超过五分钟,你就会失去一整套。如果大约五分钟,检查您是否具有该时间戳的正确记录数,就像第一组一样。重复直到(总缺失记录+总发现记录数= 72)或您用完记录。如果你到达记录的末尾但仍然有一些缺失,那么最早的时间戳不是第一个,并且你也有一套完整的时间戳。此时,要么(总缺失记录+总发现记录数= 72),要么出现问题。