首页 > 解决方案 > 显示每个 id 的任务数

问题描述

我有页面显示任务列表(使用 Jquery DataTable),我想显示员工姓名和三个任务的数量。例如:

史密斯 (2) | 约翰 (1) | 托马斯 (1)

表:

分配名称:

分配名称

任务(AssignId 作为 ForeignKey):

任务

这是我所做的:

在这里我得到任务列表并选择一些属性:

var Taskslist = db.Tasks.Select(g =>  new ServicetasksVM.ItemGroup
                { 
                    OpgaveServicesId = g.Id,
                    Opgaver = g.Opgaver,
                    Opgaveid = g.Id,
                    Opretteaf = g.Opretteaf,
                    OpretteDato = g.OpretteDato,

                }).AsEnumerable();

她遍历结果以计算每个 id:

foreach (var item in result)
                {
                    var AssignCount = db.AssignName.Where(c => c.Id == item.Assingid)
                        .GroupBy(x => x.Name)
                        .Select(b => new ServicetasksVM.ItemGroup { Assingid = b.Count(), EmployeeNames= b.Key });
                }

将所有代码放在一起(为简单起见,我删除了不需要的代码):

public JsonResult ListofTasks() {
var Taskslist = db.Tasks.Select(g =>  new ServicetasksVM.ItemGroup
            { 
                OpgaveServicesId = g.Id,
                Opgaver = g.Opgaver,
                Opgaveid = g.Id,
                Opretteaf = g.Opretteaf,
                OpretteDato = g.OpretteDato,

            }).AsEnumerable();

            var result = Taskslist.Skip(start).Take(length).ToList();
            foreach (var item in result)
            {
                var AssignCount = db.AssignName.Where(c => c.Id == item.Assingid)
                    .GroupBy(x => x.Name)
                    .Select(b => new ServicetasksVM.ItemGroup { Assingid = b.Count(), EmployeeNames= b.Key });
            }
            JsonResult json = Json(new { data = result, draw = Request["draw"], recordsTotal = totalrows, recordsFiltered = totalrowsefterfiltering }, JsonRequestBehavior.AllowGet);
            json.MaxJsonLength = int.MaxValue;
            return json;

视图模型:

public List<ItemGroup> ItemGroups { get; set; }
public class ItemGroup
{

    public ItemGroup()
    {

    }

    public int OpgaveServicesId { get; set; }
    public string Opgaver { get; set; }
    public string Opretteaf { get; set; }
    public DateTime? OpretteDato { get; set; }
    public int Opgaveid { get; set; }
    public int OpgaveSmartid { get; set; }
    public string Opgavestatus { get; set; }
    public int? Assingid { get; set; }
    public string EmployeeNames { get; set; }
}

最后,当我检查结果时,AssingidEmployeeNames都是null. 谁能帮帮我吗 :)

标签: c#asp.net-mvc

解决方案


变量的范围AssignCount仅限于 foreach 循环,这就是你得到的原因,Assingid并且EmployeeNames在程序结束时为空。

要解决此问题,请将每个计数存储AssignCount到列表中,以便您可以在foreach循环外访问所有计数

...
//Define list of List of ItemGroup, as AssignCount is of type List<ItemGroup>
List<List<ServicetasksVM.ItemGroup>> itemGroups = new List<List<ServicetasksVM.ItemGroup>>();   
foreach (var item in result)
{
    var AssignCount = db.AssignName.Where(c => c.Id == item.Assingid)
          .GroupBy(x => x.Name)
          .Select(b => new ServicetasksVM.ItemGroup { Assingid = b.Count(), EmployeeNames= b.Key })
          .ToList(); //Convert To List
   
    itemGroups.Add(AssignCount);  //Add each `AssignCount` to itemGroups
}

//Now list of AssignCount(s) is(are) accessible outside foreach loop
...

推荐阅读