IEnumerable中的字符串构建器

时间:2016-02-15 11:32:09

标签: c# asp.net-mvc

我有一个名为PostUnitManagers的表,它提供了PostUnit表之间的多对多关系。

我想显示单位管理员列表,它会显示帖子名称及其管理的单位列表。

我曾想过使用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; }
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您的PostUnitManagersPostUnitManager个对象集合类似于:

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