OK, więc mam ściśle wpisany widok "Szczegóły" klienta, który przyjmuje Model obiektu Klienta.ASP.NET MVC/LINQ: Jaki jest właściwy sposób na iterowanie przez Linq.EntitySet w widoku?
Używam LINQ do SQL i każdy Klient może mieć wiele (parking) Spacji.
Jest to relacja FK w bazie danych, więc mój model klienta generowany przez LINQ ma kolekcję "Spaces". Wspaniały!
Oto fragment kodu z mojego CustomerRepository gdzie iterację postojowych Klienta, aby usunąć wszelkie płatności, spacji, a następnie ostatecznie klient:
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);
}
wszystko działa zgodnie z oczekiwaniami!
Teraz w moim „Szczegóły” widzenia chcę wypełnić tabelę ze spacjami Klienta:
<% foreach (var s in Model.Spaces)
{ %>
<tr>
<td><%: s.ID %></td>
<td><%: s.InstallDate %></td>
<td><%: s.SpaceType %></td>
<td><%: s.Meter %></td>
</tr>
<% } %>
pojawia się następujący błąd:
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'
Wreszcie, jeśli dodać ten bit kod do mojej częściowej klasy klienta i użyj foreach w celu iteracji poprzez ParkingSpaces wszystko działa zgodnie z oczekiwaniami:
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
Problem polega na tym, że nie chcę się powtarzać. Pomyślałem także, że mogę użyć ViewModel do przekazania kolekcji Spaces do widoku, jednak LINQ już zawiera i tworzy właściwość Spaces w modelu klienta, więc myślę, że byłoby najczystsze po prostu użyć tego.
Brakuje mi czegoś prostego lub podchodzę do tego niepoprawnie?
Dzięki!
Czy Twój widok został mocno wpisany w "IEnumerable"? Jeśli tak nie jest, to prawdopodobnie dlatego nie można go wyliczyć, bez tego trochę kodu pomocnika. –
Mój widok jest mocno wpisany w Dziedziczenie = "System.Web.Mvc.ViewPage" Być może nie byłam wystarczająco czytelna, ale widok zawiera szczegóły konta klienta. Klient ma dowolną liczbę Spacji, które również powinny być wyświetlane na tej stronie. Nie chcę więc tylko listy przestrzeni, chcę mieć szczegółowy widok konta klienta, w tym przestrzeni klienta. –