2011-10-18 1 views
0

XML 파일에서 배열 목록을 검색하려고합니다. 쿼리 도구로 통합 도구를 사용합니다. 그러나 foreach 루프가없는 배열 목록을 만들고 싶다면 어떻게해야합니까? . (이유는,이 경우 foreach 문에 적용 할 수있다ASP.NET MVC-3에서 foreach 루프없이 배열 목록 표시

XML 파일 형식 : Index.cshtml에서

<arr name="ArrayinXML"><str>dsfadasfsdasda</str><str>gdhsdhshhfb</str> 

: 위의 경우

@p.ArrayinXML.FirstOrDefault()

, 두 번째 문자열 값이 아닌 첫 번째 문자열 값만 반환합니다.

+0

왜 적용 할 수 없습니까? 당신은 할 수 없다면 꽤 제한되어 있습니다. 'while'이나 for'for'를 사용할 수 있습니까? – Buildstarted

답변

0

foreach를 확장하는 확장 메서드를 만들 수 있습니까? 이 같은

뭔가 :

public static class IEnumerableExtensions 
{ 
    public static string ToString<T>(this IEnumerable<T> collection, string separater) 
    { 
     if (collection == null) 
      return String.Empty; 

     return String.Join(separater, collection); 
    } 
} 

당신은 물론 당신의 코드에서 @String.Join(p.ArrayinXML, ", ")를 호출 할 수 있지만 내가 확장 방법은 좀 더 우아하게 생각합니다.

그런 다음 당신의 Web.config에 확장 네임 스페이스를 추가하고, 당신이보기에이 작업을 수행 할 수 있습니다

@p.ArrayinXML.ToString(", ") 

편집 :

여기에 추가로 사용자 정의 할 수 있도록 변환 매개 변수를 사용하여 확장이다 :

public static string ToString<T>(this IEnumerable<T> collection, string separater, Func<T, object> transform) where T : class 
{ 
    if (collection == null) 
     return String.Empty; 

    return String.Join(separater, collection.Select(s => transform(s).ToString())); 
} 
+0

어디서 IEnumerableExtensions를 추가해야합니까? * Global.asax * 또는 * Web.Config *? 왜냐하면'@ String.Join (p.ArrayinXML, ",")'이 작동하지 않기 때문입니다. –

+0

변환과 함께 추가 확장 메소드가 추가되었습니다. @ String.Join (p.ArrayinXML, ",")은 ArrayinXML이 정확히 무엇인지에 따라 작동하지 않을 수 있습니다. 문자열 모음입니까? 객체 컬렉션? 포맷 방법은 요소가 .ToString()을 실행하는 방법에 따라 다릅니다. 확장 프로그램을 추가 할 위치는 확장 클래스 일뿐입니다. 그런 다음 기본 web.config 및 Views/web.config 파일에서 네임 스페이스를 참조하십시오. 참조 : http://stackoverflow.com/questions/3239006/how-to-import-a-namespace-in-razor-view-page/6723046#6723046 – Leniency

관련 문제