2014-02-19 5 views
1

전화 번호가 ICollection 인 모델이 있습니다. 내보기에서 기본으로 표시된 레코드의 값을 표시하려고합니다.Linq 및 DisplayFor ASP.Net MVC에서

@Html.DisplayFor(model => model.Telephones.Where(a=>a.Primary==true).Number) 

.Number은 Linq 구문에서 사용할 수 없습니다. 위의 라인을 만드는 방법이나 숫자를 표시하는 적절한 방법은 무엇입니까?

컨트롤러에서 로직을 수행하고 뷰 모델에 값을 입력해야하지만이 작업을 수행 할 수있는 것처럼 보입니다.

+0

난 당신이 번호를 가져 오기 위해 LINQ 작업을 할 수있는 내부 PrimaryNumber라는 읽기 전용 속성을 가지고 더 잘 느낀다. 그런 다음 displayfor를 해당 number 속성에 바인딩합니다. – Thanigainathan

+0

왜 이런 식으로 생각하니? –

+0

모델 논리가 모델 계층에 있어야하기 때문에 나는 그런 식으로 느꼈다. – Thanigainathan

답변

3

Where 확장 메서드는 IEnumerable<T>을 반환합니다. 당신은 단지 조건을 만족하는 첫 번째 항목을 원하는 경우, First를 사용

@Html.DisplayFor(model => model.Telephones.First(a => a.Primary).Number) 

당신은 또한 설정 만족에 정확히 하나 개의 항목 조건 (그렇지 않으면 예외를 throw)를 사용하여 고려하는 것이 확인해야하는 경우 Single는 :

@Html.DisplayFor(model => model.Telephones.Single(a => a.Primary).Number) 
+0

숫자가없는 경우주의해야합니다. 이 경우'First'는 NullRef 예외를 발생시키는 null을 반환한다고 믿습니다. 그 사건을 처리 할 필요가있어. – LB2

+0

@ LB2 당신은'FirstOrDefault'에 대해 생각하고 있습니다. 'First '는 조건을 만족하는 요소를 하나 이상 찾을 수없는 경우 InvalidOperationException을 발생시킵니다. –

+0

또한 .Single을 사용하는 경우 실제로 Top 2를 수행하는 Top 2 vs First를 발행합니다. Single을 사용하는 유일한 이유는 두 개 이상 존재하는 경우 예외가 발생해야하는 경우입니다. –