почему .Select или .ToList () дают вложенный JSON, а .Count входит в родительский JSON? - PullRequest
0 голосов
/ 21 мая 2019

все три (Attendance,InTime,OutTime) взяты из указанной таблицы

Attendence = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Count(),
InTime = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Select(y=>y.StartTime).ToList(),
OutTime = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Select(y=>y.EndTime),

C # API-код

 var TentId = objdb.Adminsitrators.Where(x => x.AdminId == AdminId).Select(x => x.TenantID).SingleOrDefault();
 var emp = objdb.Employees.Where(x=>x.TenantID== TentId).ToList(); 
         if (emp.Count > 0)
           {
             var CheckAttendance = objdb.EmpAttendances.Where(x => x.Status == "Present" & x.TenantID==TentId & x.StartTime.Year == StartTime.Year & x.StartTime.Month == StartTime.Month & x.StartTime.Day == StartTime.Day).ToList();
             var list = emp.Select(x => new
               {
                  EmpID = x.EmployeeId,
                  EmpName = x.Name,
                  EmpImage = "Areas/Admin/Image/" + x.Image,
                  Configured = fileResult(x.EmployeeId),
                  Attendence = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Count(),
                  InTime = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Select(y=>y.StartTime).ToList(),
                  OutTime = CheckAttendance.Where(y => y.EmployeeId == x.EmployeeId).Select(y=>y.EndTime),
                    }).ToList();

                    Value["result"] = "TRUE";
                    Value["Data"] = list;
                }

JSON результат

 "result": "TRUE",
    "Data": [
        {
            "EmpID": 14,
            "EmpName": "Arun Kumar",
            "EmpImage": "Areas/Admin/Image/EmployeeImg_55991775.JPG",
            "Configured": 0,
            "Attendence": 1,                 //Count Data
            "InTime": [
                "2019-05-21T16:13:18.873"    //Tolist
            ],
            "OutTime": [
                "2019-05-21T16:12:51.967"    //Select
            ]
        },

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Поскольку у вас может быть несколько значений InTime или OutTime, они сериализуются в виде массива JSON, но когда вы .Count () собираете коллекцию, вы превращаете ее в скалярное значение. Используйте .Max (), .First () или .OrderBy (...). Take (1), если вы хотите выбрать одно значение из коллекции. Или .Single (), если вы знаете, что коллекция всегда содержит один элемент.

1 голос
/ 21 мая 2019

В зависимости от отношения Select и ToList могут привести к нескольким результатам. если вам нужно максимальное время или последнее введенное значение из Intime и OutTime, вы должны запросить его. Также вы можете использовать .FirstOrDefault () вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...