2012-03-24 10 views
1

Ich habe 2 Tabellen, 1 mit Ländern, 1 mit Staaten. Die states-Tabelle enthält eine Spalte mit Population.ASP.NET MVC3 Einheiten, weiß nicht, wie man zählt

Ich bin mit Entitäten und ich habe eine Liste der Staaten für die Länder

public class TblCountries 
{ 
//Entities for my table country 
... 
public List<tblStates> States { get; set; } 
} 

So, jetzt kann ich zum Beispiel Liste alle Staaten, die zu einem Land gehören geschaffen.

Jetzt möchte ich die Bevölkerung zählen, damit ich die Bevölkerung eines ganzen Landes zeigen kann.

Ich habe versucht, in meiner Ansicht mit

@foreach (var item in Model.Countries) { 
@Html.DisplayFor(modelItem => item.States.Count<population>) 
} 

Aber das jemand nicht funktioniert, weiß, wie dies zu tun?

Vielen Dank im Voraus!

Antwort

1

Sie benötigen die Linq Sum Function

ich diesen Code überprüft haben, nicht zu verwenden, aber es wäre so etwas wie dieses:

@foreach (var item in Model.Countries) { 
var states = item.states; 
states.Select(state => state.population).Sum() 
} 

Dmitriy Meinung über die Logik in der mittleren Ebene zu halten, ist Klang Rat; Diese Zeilen verwischen jedoch mit .NET MVC und dem View-Model-Muster (was bei den Puristen draussen viel Murren verursacht).

Meine Empfehlung ist, dass wenn Sie Ihre Logik in einer Klasse hinter Ihren Controller isolieren können, dann tun Sie es. Wenn das für eine bestimmte Ansicht nicht möglich ist, können Sie Ihrer Ansicht Logik hinzufügen. Dafür ist schließlich die Syntax da.

Ein Beispiel für eine Zeit, die Sie möglicherweise benötigen, ist, wenn Sie ein generisches Ansichtsmodell für viele Ansichten haben, aber in bestimmten Ansichten einige spezifische Logikoptimierungen benötigen.

Viel Glück!

+0

Danke, ich habe das gesucht! Nun scheint es nur einen Fehler zu geben, wenn es Länder ohne Zustände gibt (scheint einen Fehler zu werfen, wenn er versucht Null-Werte zu zählen) – Arcade

1

Sie sollten keine Logik in die Ansicht einbetten. Wenn Sie in MVC programmieren, sollte Ihr Controller die erforderlichen Daten per Knopfdruck einspeisen. Die Rolle der Ansicht besteht darin, nur Daten anzuzeigen, sie hat nichts mit dem Zählen/Aufzählen/Hinzufügen/Löschen usw. zu tun.

Also, für Ihr spezielles Problem würde ich so gehen. Erstellen Sie zunächst ein ViewModel, das Länder und deren Populationen enthält. Dann füllen Sie dieses Viewmodel in der Controller-Aktion (hier gehen alle Verbindungen zur Datenbank, Zählen und Instanziierung). Danach passieren Sie, dass Viewmodel, so etwas zu sehen und schreiben:

@foreach (var item in Model.CountriesPopulations) 
{ 
    @Html.DisplayFor(modelItem => item.Value) 
} 

wo CountriesPopulations Wörterbuch sein könnte (enthält Ländernamen und Bevölkerungszahl).

+0

Ah okey, momentan gebe ich nur die ganzen Tabellen weiter und benutze diese in meinen ViewModels, ich weiß nicht wirklich ob ich die Population dazu addieren soll, aber ich werde es versuchen. danke für die Antwort! – Arcade