Получить значение в цикле foreach - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь перечислить все «группы пользователей», и если значение существует в «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>
<% } %>

Цена десятичная и может быть нулевой, если в группе пользователей нет цены.

ТИА

/ Lasse

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Я подозреваю, что вы просто ищете Single или, возможно, SingleOrDefault:

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

(приведение к decimal? должно заставить SingleOrDefault возвращать нулевое decimal? значение вместоиз 0, если совпадений не найдено.)

Обратите внимание, что ваш текущий код будет выполнять множество запросов к базе данных, хотя предполагается, что они действительно связаны с контекстами базы данных.Вероятно, вы должны выполнять эти запросы в контроллерах, а не в представлении ... Извлечь все данные, которые вам нужны в контроллере, и поместить их в модель самым простым способом для отображения представления.

2 голосов
/ 04 апреля 2011

Вам нужно выбрать одну запись:

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

, а затем вы можете проверить, равна ли цена нулю.

При этом я должен сказать, что то, что вы делаете, неправильно.Это не ответственность представления за выборку данных.Это должно быть сделано контроллером.Контроллер должен заполнить модель представления и передать эту модель в представление.Эта модель представления содержит все необходимые свойства, необходимые для представления, поэтому в представлении их нужно только показать. Код, подобный этому, не относится к представлению .

Поэтому я бы более чем настоятельно рекомендовал вам перенести эту логику в контроллер, поскольку сейчас вы нарушаете шаблон MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...