0

データ内のフラグが 1 または 2 に設定されているデータをループ処理して画面に出力するアプリケーションを使用しています。

私が使用しているアイデアは、MVC チュートリアルの 1 つからのものです。

<ul>
<%  For Each m As Movie In ViewData.Model%>
    <li><%= m.Title %></li>
<% Next%>
</ul>

しかし、上記と同様に行いたいのですが、LINQ ステートメントを使用して必要なデータを取得します。

それ、どうやったら出来るの?

私は上記のコードの多かれ少なかれ似たようなコピーから始めましたが、それがうまくいかないことはわかっていますが、それが自分のデータで何をしたかを見ていました.

 <table cellpadding="0" cellspacing="0" width="643">
      <% For Each Ticket As hdCall In ViewData.Model%>
           <tr>
                <td width="54" class="ticketList">&nbsp;</td>
                <td width="182" class="ticketList"><%=Ticket.Title%></td>
                <td width="88" class="ticketList"></td>
                <td width="148" class="ticketList"></td>
                <td width="58" class="ticketList"></td>
                <td width="115" class="ticketList"></td>
           </tr>
      <% Next%>
 </table>
4

3 に答える 3

1

これが良い考えかどうかはわかりません。ビューはできるだけ「軽く」する必要があり、Linq クエリを配置し始めると、かなりトップヘビーになり始めます。

より良いアプローチは、リポジトリ オブジェクトからデータを取得する Linq クエリを使用して、コントローラー メソッドでデータをプルすることです。詳細については、NerdDinner のチュートリアルをご覧ください。

とにかく、Jao が指摘しているように、IQueryable をビューに渡すことができ、それに対する反復は基本的に IEnumerable の反復と同じように見えます。したがって、コレクションを列挙するだけの場合、これはかなりきれいに見えます。

于 2009-09-21T15:33:22.573 に答える
0

ビューにクエリをまったく含めないでください。モデルには、表示する必要があるものが既に設定されているはずです。あなたのオリジナルforeachは正しかった。通常、コントローラーからデータ アクセス レイヤーでクエリを呼び出し、モデルに結果を入力します。例えば:

this.Model = _ticketRepository.FindAllUpcoming(); return View();

于 2009-09-21T19:10:31.557 に答える
0

where 句を追加できます。

<% For Each Ticket As hdCall in ViewData.Model.Where(m => m.IsUpcoming==true) %>

しかし、私の意見では、これはモデル (またはコントローラー) に属します。

于 2009-09-21T15:31:48.447 に答える