2015-05-09 57 views
-1

我目前被困在这个地方。我需要一些帮助。C#ArrayList组使用Linq

举例来说,这是场景输入。

输入:周一至周五06:00-22:00,萨07:00-22:00,所以08:00-22:00

Formetet到数据库表:

表名称:(开口)

  • 日| DayNumber | Number |打开|关闭

  • 星期一,1,0时,22时

  • 星期二,2,0:00,22:00
  • 星期三,3,0:00,22:00
  • 星期四,4,0:00,22:00
  • 星期五,5,0:00,22:00
  • 星期六,6,7:00,24:00
  • 太阳,0,8:00, 24:00

我想白天范围组从该表

预期结果将是这样的:

"periods": [ 
     { 
      "open": { 
      "day": 1, 
      "time": "06:00" 
      }, 
      "close": { 
      "day": 5, 
      "time": "22:00" 
      } 
     }, 
     { 
      "open": { 
      "day": 6, 
      "time": "07:00" 
      }, 
      "close": { 
      "day": 6, 
      "time": "24:00" 
      } 
     }, 
     { 
      "open": { 
      "day": 0, 
      "time": "08:00" 
      }, 
      "close": { 
      "day": 0, 
      "time": "24:00" 
      } 
     } 
     ] 

回答

0

要做到这一点,我使用这样的事情。但我认为它不会服务我的确切输出:

如果有一个组具有相同的开放关闭日期范围和这个代码将在同一组中,并没有不同。

  var keyMap = weekDayMap.GroupBy(c => new {c.OpenFrom, c.OpenTo}); 
      var openingDay = new OpeningHourMapper(); 
      var period = new List<Period>(); 
      foreach (var put in keyMap) 
      { 
       openingDay = weekDayMap.FirstOrDefault(c => c.OpenFrom == put.Key.OpenFrom && c.OpenTo == put.Key.OpenTo); 
       period.AddRange(GetPeriodList(openingDay, openingDay)); 
      } 



namespace Controllers.V1.Response.OpeningHourMapper 
{ 
    public class OpeningHourMapper 
    { 
     public int StationNumber { get; set; } 

     public string Weekday { get; set; } 

     public int WeekdayNumber { get; set; } 

     public string OpenFrom { get; set; } 

     public string OpenTo { get; set; } 
    } 
} 
1

试试这个:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Xml; 
using System.Xml.Serialization; 


namespace ConsoleApplication25 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      List<string> dayNames = new List<string>(){"Mo","Tu","We","Th","Fr","Sa","So"}; 
      string input = "Mo-Fr 06:00-22:00, Sa 07:00-22:00, So 08:00-22:00"; 
      string[] days = input.Split(new char[] { ',' }); 

      var dayRange = (from d in days 
          select d.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)) 
          .Select(x => new { days = x[0].Trim(), time = x[1].Trim() }) 
          .Select(x => new { 
           startDay = x.days.Contains("-") ? x.days.Split(new char[] {'-'})[0] : x.days, 
           endDay = x.days.Contains("-") ? x.days.Split(new char[] {'-'})[1] : x.days, 
           startTime = x.time.Contains("-") ? x.time.Split(new char[] {'-'})[0] : x.time, 
           endTime = x.time.Contains("-") ? x.time.Split(new char[] {'-'})[1] : x.time, 
          }); 

      var period = dayRange.Select(x => new { 
       open = new {day = dayNames.IndexOf(x.startDay) + 1, time = x.startTime}, 
       close = new {day = dayNames.IndexOf(x.endDay) + 1, time = x.endTime} 
      }); 

      string formatedPeriods = string.Join(",",period.Select(x => 
       "{\n\r\"open\": {\n\r" + 
       "\"day\": " + x.open.day.ToString() + "," + 
       "\"time\": " + x.open.time.ToString() + "\n\r}," + 
       "{\n\r\"close\": {\n" + 
       "\"day\": " + x.open.day.ToString() + "," + 
       "\"time\": " + x.open.time.ToString() + "\n\r}\n\r}" 
       ).ToArray()); 
      string output = string.Format("\"periods\": [\n\r{0}\n\r]",formatedPeriods); 


     } 

    } 

} 
+0

非常感谢您的意见。它是一个好的解决方案但我需要这样的东西。 我已经解析并将其存储到数据库,这是目前我正在存储的formet ' 天| DayNumber | Number |打开|关闭 Mon,1,0:00,22:00 Tue,2,0:00,22:00 Wed,3,0:00,22:00 Thu,4,0:00,22:00 星期五,5:0,22:00 星期六,6,7:00,24:00 星期日,0,8:00,24:00 ' 我需要从中获取组数据。 –

+0

我编辑我的问题。我实际上需要从这张表中获得临时数据。 –

+0

@jdweng我编辑了代码片断,因为代码片段只能用于HTML-CSS-JS三元组。对于其他语言他们只是增加噪音没有好处。 –