2015-05-09 56 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三元組。對於其他語言他們只是增加噪音沒有好處。 –