我有一个名为PostUnitManagers
的表,它提供了Post
和Unit
表之间的多对多关系。
我想显示单位管理员列表,它会显示帖子名称及其管理的单位列表。
我曾想过使用StringBuilder
创建一个单位列表:
发布1个管理:第1单元,第2单元,第3单元
后2管理:第4单元,第5单元,第6单元等
由于我还是新手,所以我不知道如何解决这个问题并走向死胡同。
我目前有以下控制器来获取PostUnitManagers列表,但这不会创建单位列表
public ActionResult UnitManagersList()
{
var records = db.PostUnitManagers;
var viewModel = records.Select(t => new ListUnitManagersViewModel
{
PostName = t.Post.PostName,
//Units = StringBuilder of all units they have a record in PostUnitMangers Table
});
return PartialView("_UnitManagersList", viewModel);
}
PostUnitMangers类
public class PostUnitManager
{
public int PostUnitManagerId { get; set; }
public int PostId { get; set; }
public int UnitId { get; set; }
public virtual Post Post { get; set; }
public virtual Unit Unit { get; set; }
}
答案 0 :(得分:1)
如果我理解正确,您的PostUnitManagers
个PostUnitManager
个对象集合类似于:
class PostUnitManager
{
public Post Post { get; set; }
public Unit Unit { get; set; }
}
如果是这种情况,您需要按Post
值对初始集合进行分组(我假设它们会覆盖Equals
方法):
var grouped = db.PostUnitManagers.GroupBy(q => q.Post).ToArray();
然后,您需要提取在特定Post
下分组的单位值:
var result = grouped.Select(q => new ListUnitManagersViewModel()
{
PostName = q.Key.PostName,
Units = String.Join(", ", q.Select(w => w.Unit.UnitName))
});