ОК, поэтому у меня есть строго типизированное представление «Сведения» клиента, которое принимает модель объекта Customer.ASP.NET MVC/LINQ: Каков правильный способ итерации через Linq.EntitySet в представлении?
Я использую LINQ to SQL, и каждый клиент может иметь несколько (парковочных) пространств.
Это отношение FK в базе данных, поэтому моя модель Customer, созданная LINQ, имеет коллекцию «Spaces». Большой!
Вот фрагмент кода из моего CustomerRepository где я перебирать паркинге Клиента удалить все платежи, пробелы, а затем, наконец, клиент:
public void Delete(Customer customer)
{
foreach (Space s in customer.Spaces)
db.Payments.DeleteAllOnSubmit(s.Payments);
db.Spaces.DeleteAllOnSubmit(customer.Spaces);
db.Customers.DeleteOnSubmit(customer);
}
Все работает, как ожидалось!
Теперь на мой взгляд, «Подробности» Я хочу, чтобы заполнить таблицу с Spaces Клиента:
<% foreach (var s in Model.Spaces)
{ %>
<tr>
<td><%: s.ID %></td>
<td><%: s.InstallDate %></td>
<td><%: s.SpaceType %></td>
<td><%: s.Meter %></td>
</tr>
<% } %>
Я получаю следующее сообщение об ошибке:
foreach statement cannot operate on variables of type 'System.Data.Linq.EntitySet' because 'System.Data.Linq.EntitySet' does not contain a public definition for 'GetEnumerator'
Наконец, если добавить этот бит код для моего частичного класса клиента и использовать foreach в представлении для итерации через ParkingSpaces, все работает так, как ожидалось:
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
Проблема в том, что я не хочу повторять себя. Я также думал, что могу использовать ViewModel для передачи коллекции пространств в представление, однако LINQ уже обнаруживает и создает свойство Spaces на модели Customer, поэтому я считаю, что было бы самым чистым просто использовать это.
Я пропустил что-то простое или приближаюсь к этому неправильно?
Спасибо!
Является ли ваше представление строго типизированным для 'IEnumerable'? Если это не так, возможно, поэтому вы не можете перечислить его, без этого хелперного кода. –
Мое мнение строго типизировано для Inherits = "System.Web.Mvc.ViewPage" Возможно, я был недостаточно ясен, но в представлении приводятся данные о счете клиента. Клиент имеет любое количество Пространств, которое также должно отображаться на этой странице. Поэтому я не хочу просто список пространств, я хочу подробный просмотр учетной записи Клиента, включая пространства клиента. –