在foreach循环中获得价值

时间:2011-04-04 07:26:58

标签: asp.net-mvc linq entity-framework

我正在尝试列出所有“用户组”,如果“UsergroupPrices”中存在一个值,则在文本框中显示它。但我不确定如何掌握价值。

<% foreach (var item in Model.Usergroups)                                   
   {
    var price = Model.BookingObject.UsergroupPrices.Where(x => x.UsergroupID == item.UsergroupID).Select(x => x.Price);
%>
<tr>
   <td><%= Html.Hidden("UsergroupIDPrice", item.UsergroupID) %><%= item.UsergroupName %>:</td>
   <td><%= Html.TextBox("UsergroupPrice", price) %></td>
</tr>
<% } %>

价格是十进制,如果用户组没有任何价格,则可能为空。

TIA

/拉塞

2 个答案:

答案 0 :(得分:2)

您需要选择一条记录:

var price = Model
    .BookingObject
    .UsergroupPrices
    .Where(x => x.UsergroupID == item.UsergroupID)
    .FirstOrDefault(x => x.Price);

然后你可以测试价格是否为空。

这就是说我必须说你所做的是错的。获取数据不是视图的责任。这应该由控制器完成。控制器应填充视图模型并将此模型传递给视图。此视图模型包含视图所需的所有必需属性,因此在视图中您只需显示它们。 此类代码不属于视图

所以我强烈建议您将此逻辑驱逐到控制器中,因为您现在违反了MVC模式。

答案 1 :(得分:2)

我怀疑你只是在寻找Single或可能SingleOrDefault

var price = Model.BookingObject.UsergroupPrices
                               .Where(x => x.UsergroupID == item.UsergroupID)
                               .Select(x => (decimal?) x.Price)
                               .SingleOrDefault();

(对decimal?的强制转换是为了使SingleOrDefault返回空decimal?值而不是0,如果找不到匹配项。)

请注意,您当前的代码将会进行大量的数据库查询,假设它们实际上与数据库上下文相关联。您可能应该在控制器中进行这些查询,而不是视图...在控制器中获取所需的所有数据,并以最简单的方式将其放入模型中以供显示视图。