2017-02-02 8 views
1

私は寮内の洗濯機の予約システムを開発中です。 これはASP.NET MVCアプリケーションになります。 私はテーブルに置くべきWashingTimeクラスを持っています。ユーザーはそれをクリックして洗濯時間を予約することができます。Cで時刻表を作る方法

public class WashTime 
{ 
    public int ID { get; set; } 

    public DateTime Time { get; set; } 

    public bool IsBooked { get; set; } 

    public string Machine { get; set; } 

    public int RoomNumber { get; set; } 
} 

私はバックエンドとしてMS SQLデータベースを使用しています:

WashingTimeクラスは次のようになります。 私はタイムテーブルと予約システムを稼働させていますが、これを行う私のやり方は賢明ではないので、ビュー(タイムテーブル)にはかなりの時間がかかります。 私はモデルオブジェクトが予約されているかどうかを確認するために非常に多くのRazorを使用しています。これを行うにはよりスマートな方法があります。JavaScriptでこれをチェックする方法が必要であると考えていました。 ビューのための私のコードは次のとおりです。

@for (int i = 6; i < 24; i++) 
{ 
<tr> 
<th>@i.ToString():00 - @(1 + i):00</th> 
<td> 
    <table class="col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td class=""> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Monday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td class=""> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Tuesday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td class=""> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Wednesday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 

</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td class=""> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Thursday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td class=""> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Friday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Left").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Right").RoomNumber 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Saturday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
<td> 
    <table class="no-padding col-xs-12"> 
     <div class="inner-table"> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Left").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Left").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Left").Machine 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Left").Machine 
         </div> 
        } 

       </div> 
      </td> 
      <td> 
       <div class="rid"> 

        <div id="ID" style="display: none;" data-value="@Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Right").ID"></div> 

        @if (Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Right").IsBooked == true) 
        { 
         <div class="booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Right").Machine 
         </div> 
        } 
        else 
        { 
         <div class="not-booked"> 
          @Model.First(d => d.Time.Hour == i && d.Time.DayOfWeek == DayOfWeek.Sunday && d.Machine == "Right").Machine 
         </div> 
        } 

       </div> 
      </td> 
     </div> 
    </table> 
</td> 
</tr> 

}

あなたは、私はかみそりで252のチェックをやっていると私はそれが多くのことを自分のページを遅くする必要があります考えて見ることができるように。

ビューを呼び出すコントローラは次のようになります。

public ActionResult Index() 
    { 
     List<WashTime> times = db.WashTimes.Where(x => x.Time.Year == DateTime.Today.Year).ToList(); 
     List<WashTime> thisWeek = times.Where(time => HelperFunctions.GetIso8601WeekOfYear(time.Time) == HelperFunctions.GetIso8601WeekOfYear(DateTime.Today)).ToList(); 
     if (thisWeek.Count<(126*2)) 
     { 
      FillWeek(); 
      times = db.WashTimes.Where(x => x.Time.Year == DateTime.Today.Year).ToList(); 
      thisWeek = times.Where(time => HelperFunctions.GetIso8601WeekOfYear(time.Time) == HelperFunctions.GetIso8601WeekOfYear(DateTime.Today)).ToList(); 
     } 
     ViewBag.Weeknumber = HelperFunctions.GetIso8601WeekOfYear(DateTime.Now); 
     return View(thisWeek.ToList()); 
    } 

私はあなたのコメントを楽しみにしています。

+0

からLINQ機能を取りましたか? – Steve

答えて

0

あなたの問題は、Model.Firstが、一致する全一致を見つけるのに時間が掛かることです。 Firstへの各コールは、潜在的にリストの各項目をチェックします。

あなたが確認できる他の構造を作成する必要があります。たとえば、第1キーが日曜日、第2キーが1時間、第3キーが "First"または "Second"である場合はDictionary < int ,Dictionary<int, Dictionary<string, WashTime>>>となります。

このフィールドの検索であなたのリストを注文し、インデックスを使用して前の注文を信頼してください。ここに例があります。私はそれを試していないが、あなたがそのアイデアを得ることができるように。私はそれが初めてまたはその遅いすべての時間のために遅くさhere(multiple groupby)here(group by to remove duplicates)here(multiple order by)

List<WashTime> thisWeek = times.Where(
    time => HelperFunctions.GetIso8601WeekOfYear(time.Time) == HelperFunctions.GetIso8601WeekOfYear(DateTime.Today) 
).OrderBy(f => f.Time.DayOfWeek).ThenBy(f => f.Time.Hour).ThenBy(f.Machine 
).GroupBy(
    f=> new { f.Time.DayOfWeek, f.Time.Hour, f.Machine} 
).Select(
    group => group.First() 
).ToList() 
関連する問題