Aceptar, así que tengo una vista de "Detalles" del cliente fuertemente tipada que toma un Modelo de objeto del cliente.ASP.NET MVC/LINQ: ¿Cuál es la forma correcta de iterar a través de un Linq.EntitySet en una vista?
Estoy usando LINQ to SQL y cada Cliente puede tener múltiples (estacionamiento) Espacios.
Esta es una relación FK en la base de datos, por lo que mi modelo de Cliente generado por LINQ tiene una colección de "Espacios". ¡Estupendo!
Aquí es un fragmento de código de mi CustomerRepository donde iterar a través de plazas de aparcamiento del Cliente para eliminar todos los pagos, espacios y, finalmente, el cliente:
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);
}
todo funciona como se esperaba!
Ahora mi punto de vista "Detalles" Quiero llenar una tabla con los espacios del Cliente:
<% foreach (var s in Model.Spaces)
{ %>
<tr>
<td><%: s.ID %></td>
<td><%: s.InstallDate %></td>
<td><%: s.SpaceType %></td>
<td><%: s.Meter %></td>
</tr>
<% } %>
me sale el siguiente error:
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'
Por último, si añado este bit de codificar a mi clase parcial de cliente y usar el foreach en la vista para iterar a través de los espacios de estacionamiento todo funciona como se esperaba:
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
El problema aquí es que no quiero repetirme. También estaba pensando que podría usar un ViewModel para pasar una colección de Spaces a la Vista, sin embargo, LINQ ya infiere y crea la propiedad Spaces en el modelo de Cliente, por lo que creo que sería más útil usarlo.
¿Me falta algo simple o me estoy acercando a esto incorrectamente?
Gracias!
¿Su vista está fuertemente tipada a 'IEnumerable'? Si no lo es, probablemente sea por eso que no puedes enumerarlo, sin ese pequeño código de ayuda. –
Mi opinión está fuertemente tipada a Inherits = "System.Web.Mvc.ViewPage" Quizás no era lo suficientemente claro, pero la vista proporciona los detalles de la cuenta de un cliente. El cliente tiene cualquier cantidad de espacios que también se deben mostrar en esta página. Así que no quiero solo una lista de espacios, quiero una vista detallada de una cuenta de cliente que incluya los espacios del cliente. –