Отображение количества задач для каждого идентификатора - PullRequest
0 голосов
/ 20 июня 2020

У меня есть страница, на которой я отображаю список задач (с Jquery DataTable), и я хочу, чтобы отображалось имя сотрудника с количеством задач thire. например:

Smith (2) | Джон (1) | Thomas (1)

Таблицы:

AssignName:

assignname

Tasks (AssignId as 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();

Она повторяет результаты, чтобы подсчитать каждый идентификатор :

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 ]

0 голосов
/ 20 июня 2020

Ваш for l oop выполняет подсчет и присваивает его переменной AssignCount, которая существует только в области for l oop. Вам нужно записать этот результат в переменную, выходящую за рамки l oop, чтобы передать его вашему представлению.

Что-то вроде:

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);
}
    
0 голосов
/ 20 июня 2020

переменная AssignCount является локальной в foreach l oop. лучше создать коллекцию вне l oop и продолжать добавлять к ней внутри l oop.

0 голосов
/ 20 июня 2020

Область действия переменной AssignCount ограничена значением foreach l oop, поэтому вы получаете Assingid и EmployeeNames как ноль в конце программы.

Чтобы исправить это проблема, сохраните каждый AssignCount в списке, чтобы вы могли получить доступ ко всем счетам из foreach l oop

...
//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
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...