2011-03-10 5 views
1

도메인 개체의 계층 적 컬렉션을 반복하고 해당 뷰 모델에 매핑하는 효율적인 방법을 생각해 봅니다.도메인 계층 적 컬렉션을 ViewModels의 계층 적 컬렉션으로 매핑

내가 도메인 개체의 다음과 같은 두 가지 유형이 있다고 가정 :

(1) 폴더 - 폴더 개체 중 하나 개 수집 및 항목 개체 중 하나 콜렉션 -이 객체가이 컬렉션이 있습니다. 폴더 도메인 개체에 대한 하나 Item 객체에 대한 한 -

(2) 항목

는 지금, 나는이 개보기 모델 클래스가 있습니다. 내 전체 계층 컬렉션을 통해 효율적으로 반복 할 수있게하려면 개체가 Folder 또는 항목인지 여부에 따라 해당 도메인 개체에 대한 새 뷰 모델 클래스를 만들고 개체를 뷰 모델의 생성자에 전달합니다. 기본적으로 계층 적 도메인 객체 컬렉션의 계층 적 뷰 모델 표현으로 끝내기를 원합니다. 나는 eaches를 위해 중첩 된 것으로 이것을 할 수 있다는 것을 알고 있지만 누군가가 확장 메소드, linq 및 lambda를 사용하는 방법을 알고 있다고 생각했습니다.

도움 주셔서 감사합니다.

+0

계층 적으로 재귀 적으로 공명합니다. – driushkin

+0

여기 '효율적으로'는 무엇을 의미합니까? 실적을 최적화하고 있습니까? –

답변

0

당신은 두 개의 컬렉션을 노동 조합에 그 같은 LINQ 쿼리를 사용할 수 있습니다

public class Folder 
{ 
} 

public class Item 
{ 
} 

public IEnumerable<Object> GetChildren() 
{ 

    Folder[] Folders = new Folder[] { }; 
    Item[] Items = new Item[] { }; 

    return ((IEnumerable<Object>)(from Folder folder in Folders 
            select folder)) 
            .Union<Object>(
      (IEnumerable<Object>)(from Item item in Items select item)); 
} 

당신을위한 공통 기본 클래스의있는 경우 대신 "개체"내 생각

0

의를 사용하는 것이 더 확실 당신은 다음과 같은 것을 찾고 있습니다 :

public class FolderVM 
{ 
    public string Name {get; private set;}  

    public IEnumerable<FolderVM> Folders { get; private set; } 
    public IEnumerable<ItemVM> Items { get; private set; } 

    public FolderVM(Folder folder) 
    { 
    Name = folder.Name; 

    Folders = folder.ChildFolders.Select(f=> new FolderVM(f)); 
    Items = folder.Items.Select(i=> new ItemVM(i)); 
    } 
} 

렌더링은 아마도 각각 재귀적일 것입니다.