使用ViewBag将通用List <t>数据从Controller传递到View

时间:2019-05-25 08:06:12

标签: c# asp.net-mvc

我正在将表分组后发送数据,并使用视图包将其传递给View,并希望显示数据

我可以将数据从Controller传递到View,但是由于List也包含List,这对我来说也有些混乱

控制器

var data = (from e in `dc.tb`l
                        group e by e.a into g
                        select new
                        {
                            Name = g.Key,
                            `Task``Name` = g.Select(x => x.'task').To'List'(),
                            Task_Assignee = g.Select(x =>x.Name).To'List'(),
                            Task_Assigned_Date = g.Select(x =>x.U_Date).To'List'(),
                            Task_Completed_Date = g.Select(x => x.date).To'List'(),
                            Remarks_From_Assignee = g.Select(x => x.U_Remarks).To'List'(),
                            Remarks_From_Assigner = g.Select(x =>x.'rem').To'List'(),
                            Points_Given = g.Select(x=>x.Points).To'List'(),
                        }).To'List'();

如何在表中显示与用户名有关的分组数据

1 个答案:

答案 0 :(得分:0)

那是一个可怕的主意。您不能只绕过匿名对象并保持所有类型的安全,这也不是主意。考虑到这么多内部查询,这也是一个糟糕的查询。

在这里,您应该使用以下通用模式和命名约定:

public class TaskGroup
{
    public string Key { get; set; }
    public Lists<TaskViewModel> Tasks { get; set; }
}

public class TaskViewModel
{
    public string Name { get; set; }
    public string Assignee { get; set; }
    // rest of the properties
}

您可以通过以下方式使用它:

List<TaskGroup> data = context.TableName
    .GroupBy(x => x.GroupingProperty)
    .Select(grp => new TaskGroup 
    {
        Key = grp.Key,
        Tasks = grp.Select(task => new TaskViewModel
        {
            Name = task.Task,
            Assignee = task.Name,
            // etc
        })
        .ToList()
    })
    .ToList();