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