0

我有一个正在处理的应用程序,我想在其中循环一些数据,其中数据中的标志设置为 1 或 2 并将其打印到屏幕上。

我正在使用的想法来自 MVC 教程之一:

<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

您可以添加 where 子句:

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

但在我看来,这属于模型(或控制器)。

于 2009-09-21T15:31:48.447 回答
0

您的视图根本不应该包含查询。您的模型应该已经填充了它需要显示的内容。你的原件foreach是正确的。通常,我从控制器调用数据访问层中的查询,并用结果填充模型。例如:

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

于 2009-09-21T19:10:31.557 回答