2016-04-08 1 views
0

値を得ることができます: - DAYOFWEEK - クラス
8時は、どのように私はKeyValuePairからの値が、私はそう私がデータベースから取得していますすることで、授業時間、daysofweekとクラスとジムのタイムテーブルを構築する必要が

時間 - 1 - Natação
8時00 - 3 - Natação
8:30 - 1 - 柔術
9時 - 1 - Natação
十時30 - 1 - 柔術
14:00 - 3 - Natação

マイモデル:

public ActionResult Index() 
    { 
     Context _q = new Context(); 

     var query = from x in _q.Aulas 
        group x by x.AulaHora into g 
        select new Group<DateTime, Aulas> { Key = g.Key, Values = g }; 


     return View(query.ToList()); 
    } 

マイビュー

public class Group<K, T> 
{ 
    public K Key; 
    public IEnumerable<T> Values; 
} 

public class Aulas 
{ 
    public int id { get; set; } 
    public int idDias { get; set; } 
    public DateTime AulaHora { get; set; } 
    public string AulaNome { get; set; } 

} 

私のコントローラは:

@using Grid.Models; 
 
@model List<Group<DateTime, Aulas>> 
 
@{ 
 
    ViewBag.Title = "Index"; 
 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
 
} 
 
<table class="table table-striped"> 
 
    <thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead> 
 
     @foreach (var item in Model) 
 
     {  
 
      <tr> 
 
       @foreach (var i in item.Values) 
 
       { 
 
       <td>@i.AulaHora.ToString("HH:mm")</td> 
 
       <td>@((i.idDias == 1) ? i.AulaNome.ToString() : "")</td> 
 
       <td>@((i.idDias == 2) ? i.AulaNome.ToString() : "")</td> 
 
       <td>@((i.idDias == 3) ? i.AulaNome.ToString() : "")</td> 
 
       <td>@((i.idDias == 4) ? i.AulaNome.ToString() : "")</td> 
 
       <td>@((i.idDias == 5) ? i.AulaNome.ToString() : "")</td> 
 
       <td>@((i.idDias == 6) ? i.AulaNome.ToString() : "")</td> 
 
       } 
 
      </tr> 
 
     } 
 
</table>

残念ながら、私はKeyValuePairと経験を持っていません。誰かが私が何をする必要があるかを提案できれば、本当に感謝しています。

ありがとうございます。

答えて

1

各KeyValuePairには値を与える.Valueプロパティが含まれます。より良い問題を理解した後、このMSDN https://msdn.microsoft.com/en-us/library/ms224761(v=vs.110).aspx

編集を参照してください。

あなたの問題は2倍です。

  1. 最初に、必要な出力のタイプについて誤ったクエリを作成しています。
  2. 2番目のビューでは、クエリをループして間違った表示をすることがあります。

私があなただったら、もはや必要ないようにGroupクラスを取り除くでしょう。 Dictionaryがあなたのニーズに適しています。あなたのモデルをDictionary<DateTime, List<Aulas>>に設定します。

Dictionary<DateTime, List<Aulas>> query = 
    new Dictionary<DateTime, List<Aulas>>(); 

_c.Aulas.ForEach(
    (a) => 
    { 
     if (query.ContainsKey(a.AulaHora)) 
     { 
      query[a.AulaHora].Add(a); 
     } 
     else 
     { 
      query.Add(a.AulaHora, new List<Aulas>() { a }); 
     } 
    }); 

return View(query); 

次に、必要な結果を得るには、それらを別々にループする必要があります。

@using Grid.Models; 
@model Dictionary<DateTime, List<Aulas>> 
@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<table class="table table-striped"> 
    <thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead> 
     @foreach (var item in Model) 
     {  
      <tr> 
      <td>@(item.Key.ToString("HH:mm"))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 1).Select((sa) => sa.AulaNome)))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 2).Select((sa) => sa.AulaNome)))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 3).Select((sa) => sa.AulaNome)))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 4).Select((sa) => sa.AulaNome)))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 5).Select((sa) => sa.AulaNome)))</td> 
      <td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 6).Select((sa) => sa.AulaNome)))</td> 
      </tr> 
     } 
</table> 

ちょっとしたこと。私はAulasのDateTimeに基づいて辞書を作成しています。一致するDateTimeキーがある場合は、ディクショナリ内の既存のエントリにAulasを追加します。その方法で、ビューでループすると、私はDateTimeでループしています。次に、各列(<td>)に対して、私は、List<Aulas>になる.ValueのWhere句を実行し、選択したデータ型を取得するためにSelectクエリを実行します。特定のidDiasを持つすべてのAulasを取り出し、String.Join()メソッドを使用して結合します。

+0

ご意見ありがとうございます。私はすでにこのMSDNを見てきましたが、私が書いたように私は鍵ペアを経験しておらず、これを解決する方法はわかりません。私たちを手伝ってくれますか? – Rodney

+0

@RodneyあなたのKeyValuePairはどの変数ですか? – Mikanikal

+0

申し訳ありませんが、私はあなたが求めるものを得ることはありません。 – Rodney

関連する問題