将域对象的分层集合映射到ViewModel的分层集合

时间:2011-03-10 14:30:40

标签: c# linq lambda extension-methods

我正在尝试一种有效的方法来迭代域对象的分层集合并将它们映射到相应的视图模型。

假设我有以下两种类型的域对象:

(1)文件夹 - 此对象有两个集合 - 一个文件夹对象集合和一个Item对象集合。

(2)项目

现在,我有两个视图模型类 - 一个用于Folder域对象,另一个用于Item对象。我希望能够有效地遍历整个层次集合,并根据对象是文件夹还是项目,我将为相应的域对象创建一个新的视图模型类,并将该对象传递给视图模型的构造函数。基本上,我想最终得到分层域对象集合的分层视图模型表示。我知道我可以用一些嵌套的eaches做到这一点,但我认为有人可能知道使用扩展方法,linq和lambda的方法。

感谢您的帮助。

2 个答案:

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

如果你有一个共同的基类,那么肯定更好地使用它而不是“对象”

答案 1 :(得分: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));
  }
}

渲染可能会分别递归。