2012-03-24 92 views
1

我有2個表,1個國家,1狀態。 狀態表有一列有人口的列。ASP.net MVC3實體,不知道怎麼算

我使用實體和我創建國家名單的國家

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

所以,現在我可以爲例如列出所有屬於一個國家的狀態。

現在我想做的是統計人口,所以我可以證明,整個國家的人口。

我試圖用我的觀點

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

但是,這是不行的,任何人都知道如何做到這一點?

感謝先進!

回答

1

您需要使用Linq Sum Function

我沒有檢查這個代碼,但它會是這樣的:

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

德米特里的關於保持邏輯的中間層的意見是合理的諮詢;然而,這些線條正在模糊.NET MVC和視圖模型模式(這引起了那裏的純粹主義者的很多怨言)。

我的建議是,如果你可以隔離你的控制器背後的類的邏輯,那麼這樣做。如果這對於給定的視圖來說是不可能的,那麼隨意爲你的視圖添加邏輯。畢竟,這是語法的目的。

的時間,你可能需要做這方面的一個例子是,如果你有交付給很多意見通用的瀏覽模式,但需要在某些觀點的幾個特定的​​邏輯調整。

祝你好運!

+0

謝謝,我正在尋找這個!現在我似乎只有在沒有狀態的國家出現錯誤(如果它嘗試計數空值,似乎會引發錯誤) – Arcade 2012-03-24 13:37:44

1

你不應該嵌入任何邏輯到視圖中。在MVC中編程時,您的控制器應該提供視圖必要的數據。視圖的作用是隻顯示數據,它無關計數/枚舉/添加/刪除等

因此,對於您特定的問題,我想是這樣的。首先,創建一個包含國家及其人口的ViewModel。然後在控制器動作中填充該視圖模型(這裏是所有到數據庫的連接,計數和實例化)。在這之後,你傳遞視圖模型來查看和寫是這樣的:

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

其中CountriesPopulations可能詞典(包含國名和人口數)。

+0

啊okey,目前我只是傳遞整個表,並在我的viewModels中使用這些,我真的不知道要增加人口,但我會試一試。 感謝您的答覆! – Arcade 2012-03-24 12:45:00