提问者:小点点

显示每个id的任务计数


我有一个页面,其中我显示任务列表(使用Jquery DataTable),我想要显示员工姓名和thire任务计数。 例如:

史密斯(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;

ViewModel:

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

最后,当我检查结果时,Assingid和EmployeeNames都是null。 谁能帮帮我吗?)


共3个答案

匿名用户

AssignCount变量的作用域仅限于foreach循环,这就是在程序结束时将AssingIDEmployeeNames作为null的原因。

若要解决此问题,请将每个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
...

匿名用户

您的for循环正在执行计数并将其分配给变量AssignCount,该变量仅存在于for循环的作用域中。 您需要在循环范围之外的变量中捕获结果,以便将结果传递给您的视图。

类似于:

var itemGroups = new List<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 });
     itemGroups.Add(AssignCount);
}
    

匿名用户

变量assignCountforeach循环中是本地的。 最好在循环外部创建集合,并在循环内部继续添加。