nested group by in LINQ give me "The LINQ expression could not be translated"

65 Views Asked by At

this query for make list of department every department have list of Employees then every employee has list of data about his attendance for that I use nested group in multiple layer then use nested select to display data but i get error ""The LINQ expression could not be translated" then i use group in one layer then use select , into select i use group by then select but also get the same error i don't Know what is the wrong part in my code

public async Task<dynamic> GetPermissionByDept(DateTime fromDay, DateTime toDay)
{
    return await (
        from perm in _db.Permissions.Include(p => p.PermissionType)
                                    .Include(p => p.Employee).ThenInclude(e => e.OrgUnit)

        where perm.DayDate >= fromDay && perm.DayDate <= toDay
        where perm.Employee.IsActive && perm.IsApproved

        let department = _db.OrgUnits
                            .Where(o => perm.Employee.OrgUnit.Hid.IsDescendantOf(o.Hid) && o.Hid.GetLevel() <= 3)
                            .OrderByDescending(o => o.Hid.GetLevel())
                            .Select(o => o.Name)
                            .FirstOrDefault()
        group new
        {
            Employee = new EmployeeWithDept(perm.Employee, department),
            DepartmentName = department,
            PermissionType = perm.PermissionType.Name,
            perm.DayDate,
            perm.FromTime,
            perm.ToTime,
            PermMinutes = TimeSpan.FromMinutes(perm.ToTime.Subtract(perm.FromTime).TotalMinutes),
        }
        by department into deptGroup

        from empGroup in
        (
            from department in deptGroup
            group department by department.Employee
        )
        group empGroup by deptGroup.Key into empData

        select new
        {
            empData.Key,
            EmployeeDetails = empData.Select(p => new
            {
                p.Key.FullNameAr,
                p.Key.FullNameEn,
                TotalMinutes = TimeSpan.FromMinutes(p.Sum(x => x.PermMinutes.TotalMinutes)),
                PermissionCount = p.Count(),
                Permissions = p.Select(x => new
                {
                    x.PermissionType,
                    x.DayDate,
                    x.FromTime,
                    x.ToTime,
                    x.PermMinutes
                }).ToList()
            }).ToList()
        })
        .AsNoTracking()
        .ToListAsync();
}
0

There are 0 best solutions below