ASP.NET MVC 3:处理列表列表的ViewModel

时间:2011-03-29 01:25:01

标签: entity-framework asp.net-mvc-3 viewmodel

我正在尝试将一个ViewModel组合在一起,该ViewModel将包含一个用户列表,每个用户都会有一个位置列表。 User表和Location表通过另一个表连接在一起,该表包含每个相应的ID和一些其他信息。该表本质上是一个多对多的连接表。 我尝试了一些不同的viewModel方法,我们严重缺乏......显示此类信息的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我认为问题在于您希望能够通过用户或位置访问该集合。一种方法可以是使用ILookup<>类。您将从多对多集合开始,并生成如下所示的查找:

var lookupByUser = userLocations.ToLookup(ul => ul.User);
var lookupByLocation = userLocations.ToLookup(ul => ul.Location);

<强>更新

根据您的描述,您似乎并不需要在ViewModel中拥有完整的多对多关系。相反,您的ViewModel可以具有如下结构:

public class YourViewModel
{
    public IEnumerable<UserViewModel> Users { get; set; }
}

public class UserViewModel
{
    // User-related stuff

    public IEnumerable<LocationViewModel> Locations { get; set; }
}

如果您想避免冗余的LocationViewModel个对象,可以预先构建Model和ViewModel对象之间的映射:

var locationViewModels = myLocations.ToDictionary(
    loc => loc, loc => CreateLocationViewModel(loc));

然后在填充页面的ViewModel时重用这些对象。