1

私は MVC / Razor の初心者で、少し方向性が必要です。MongoDB データベースから日付を取得するトレーニング カレンダーを作成しようとしています。以下の解決策は機能しますが、それを見ると、より効率的に実行できることがわかり、いくつかの指針が必要です。

これは、月に 1 日である私のページの div のコードです... 私はページに 4 か月あります。Model.TrainingDaysですList<TrainingEvent> TEventTrainingEventインスタンスには次のプロパティがあります。

string CssClass
string EventName

これが私のかみそりのコードです(ここ_dayで、レンダリングしている月の日は次のとおりです。

<div class="day">
    <div class="dayBox">@_dayNumber.ToString("00") <span class="black">@_day.ToString("ddd")</span></div>

    @foreach (var item in Model.TrainingDays)
    {
        if (_day.Date == item.Date.Date)
        {
            string eventCls = "eDay " + item.TEvent.CssClass;
            <div class="@eventCls">@item.TEvent.EventName</div>
            break;
        }
    }
</div>

の日付がTrainingEvent現在の div と一致する場合は_day、Event を追加します。多くのイベントがある場合、foreach ループはこれを行う最良の方法ではありません。これをどのように行う必要がありますか?これは私の最初の投稿でもあるため、質問の仕方についてアドバイスをいただければ幸いです。どうもありがとう!ティム

4

2 に答える 2

3

次のようなものを試してください。

<div class="day">
    <div class="dayBox">@_dayNumber.ToString("00") <span class="black">@_day.ToString("ddd")</span></div>

    @foreach (var item in Model.TrainingDays.Where( td => td.Date.Date == _day.Date ))
    {
            string eventCls = "eDay " + item.TEvent.CssClass;
            <div class="@eventCls">@item.TEvent.EventName</div>
            break;
    }
</div>
于 2012-05-09T13:03:43.483 に答える
1

パフォーマンスへの影響が本当に心配な場合は、TrainingDays を日付でグループ化し、それらを辞書に変換できます。Razor の構文はよくわかりませんが、通常の C# では次のようにします。

var trainingDaysByDay = Model.TrainingDays
    .GroupBy(td => td.Date.Date)
    .ToDictionary(g => g.Key);

次に、次のようにして、その日のアイテムを検索できます。

foreach(var item in trainingDaysByDay[_day.Date])
{
    //...
}

このようにして、TrainingDays のコレクション全体を 1 回だけ反復処理し、毎日、必要な特定のオブジェクトのみを操作します。ただし、膨大なデータセットがない限り、違いはごくわずかです。

于 2012-05-09T13:12:28.167 に答える