2012-03-24 4 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

고마워, 나는 이것을 찾고 있었다! 이제 상태가없는 국가가있는 경우에만 오류가 발생하는 것 같습니다 (Null 값을 계산하려고하면 오류가 발생하는 것 같습니다) – Arcade

1

보기에 논리를 포함하지 마십시오. MVC에서 프로그래밍 할 때 컨트롤러는 뷰에 필요한 데이터를 스푼 피드해야합니다. 보기의 역할은 데이터 만 표시하는 것입니다. 카운팅/열거/추가/삭제 등과 아무런 관련이 없습니다.

그래서 특별한 문제 때문에 이렇게 갈 것입니다. 먼저, 국가 및 인구를 포함 할 ViewModel을 만듭니다. 그런 다음 컨트롤러 동작에서 해당 뷰 모델을 채 웁니다. 여기서는 데이터베이스에 대한 모든 연결을 계산하고 인스턴스화합니다. 그 후,이 같은 것을 확인하고 작성하는 뷰 모델을 통과 : CountriesPopulations 사전 수 있습니다

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

는 (국가 이름과 인구 수를 포함).

+0

아아키, 현재 전체 테이블을 전달하고 내 viewModels에있는 테이블을 사용합니다. 실제로 인구를 추가 할 필요는 없지만 시도해 보겠습니다. 답장을 보내 주셔서 감사합니다! – Arcade

관련 문제