2011-03-10 42 views
1

我想通過域對象的層次集合進行迭代並將它們映射到其相應視圖模型的高效方法。將域對象的層次集合映射到視圖模型的層次集合

假設我有以下兩種類型的域對象:

(1)文件夾 - 這個對象有兩個集合 - 文件夾對象的一個​​集合和項目對象的一個​​集合。

(2)項目

現在,我有兩個視圖模型類 - 一個用於文件夾域對象,一個用於Item對象。我希望能夠有效地遍歷整個分層集合,並根據對象是文件夾還是項目,我將爲相應的域對象創建一個新的視圖模型類,並將該對象傳遞給視圖模型的構造函數。基本上,我想最終獲得分層域對象集合的分層視圖模型表示。我知道我可以用一些嵌套的eaches來做到這一點,但我認爲有人可能知道使用擴展方法,linq和lambda的方式。

感謝您的幫助。

+0

分層共振與遞歸很好 – driushkin 2011-03-10 15:53:46

+0

這是什麼意思,'高效'在這裏?你在優化你的表現嗎? – 2011-03-10 16:29:56

回答

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)); 
    } 
} 

而渲染將可能分別遞歸。