2011-03-10 37 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)); 
    } 
} 

而渲染将可能分别递归。