代码之家  ›  专栏  ›  技术社区  ›  omoto

如何显示开放时间?

  •  3
  • omoto  · 技术社区  · 15 年前

    Opening Times
    (来源: clip2net.com )

    每天

    table
    (来源: clip2net.com )

    然后我创建了query=>

    var groups = from s in this.OpenTimes
    orderby s.Day
    group s by new { s.Till, s.Start } into gr
    select new
    {
        Time = gr.Key.Start + "-" + gr.Key.Till,
        Days = this.OpenTimes
            .Where(o => o.Start == gr.Key.Start && o.Till == gr.Key.Till)
            .OrderBy(d => d.Day).Select(d => d.Day).ToArray()
    };
    

    此查询提供包含在此时间范围内的所有分组时间间隔和天数 但我面临的问题是——我创造了代表这个群体的下半场,但它不能正常运作。 也许有人可以向我解释所需要的视角或展示开放时间的基本逻辑。

    谢谢你的建议。。。

    1 回复  |  直到 5 年前
        1
  •  1
  •   omoto    15 年前

    下一个方法对我有效:

    result screen

      public string OpeningTimesString
          {
             get
             {
                if (!this.OpeningTimes.IsLoaded)
                   this.OpeningTimes.Load();
                var groups = (from s in this.OpeningTimes
                           orderby s.Day, s.Start, s.Stop
                           group s by new { Stop = formatTime(s.Stop), Start = formatTime(s.Start), s.Day } into gr
                           select new
                           {
                              Time = gr.Key.Start + "-" + gr.Key.Stop,
                              Day = gr.Key.Day
                           }).ToList();
                string result = "";
                int tmp = 1;
                for (int i = 0; i < groups.Count(); i++)
                {
    
    
                   //One one = new One();
                   bool exit = false;
                   tmp = i;
                   while (exit == false)
                   {
                      if (i + 1 < groups.Count && groups[i].Time.Equals(groups[i + 1].Time))
                      {
                         i++;
                      }
                      else
                      {
                         if (tmp != i)
                            result += (NormalDayOfWeek)(groups[tmp].Day - 1) + "-" + (NormalDayOfWeek)(groups[i].Day - 1) + " : " + groups[i].Time + "<br />";
                         else
                            result += (NormalDayOfWeek)(groups[i].Day - 1) + " : " + groups[i].Time + "<br />";
                         exit = true;
                      }
                   }
                }
    
                if (result.IsNotNull())
                   return result;
                else
                   return "[%Not yet defined]";
             }
          }