public async Task <IActionResult> GetLoginStatus(bool asAdministrator = false) { IEnumerable <Login> logins; if (User.FindFirst("role")?.Value == "Administrator" && asAdministrator) { logins = await _repo.GetLogins(); } else { var userId = User.FindFirst("sub").Value; logins = await _repo.GetLogins(userId); } DateTime date = DateTime.Now; var firstDayOfMonth = new DateTime(date.Year, date.Month, 1); var lastDayOfMonth = firstDayOfMonth.AddMonths(1); var accts = await _repo.GetAcctNAsync(logins.Select(c => c.LoginName).ToString(','), firstDayOfMonth, lastDayOfMonth); var acctsss = await _repo.GetSSAcctNAsync(logins.Select(c => c.LoginName).ToString(','), firstDayOfMonth, lastDayOfMonth); var onlines = await GetOnlineUserNamesAsync(); var model = logins.Select(c => new LoginStatus { AllowDialIn = c.AllowDialIn, Enabled = c.Enabled, LoginName = c.LoginName, UserId = c.UserId, MonthlyTraffic = c.MonthlyTraffic, SSMonthlyTraffic = acctsss.FirstOrDefault(d => d.Item1 == c.LoginName).Item2, IsOnline = onlines.Contains(c.LoginName), Port = c.Port, BasicAcct = new BasicAcct() { TotalIn = accts.FirstOrDefault(d => d.UserName == c.LoginName)?.TotalInput ?? 0, TotalOut = accts.FirstOrDefault(d => d.UserName == c.LoginName)?.TotalOutput ?? 0, } }).ToArray(); return(Ok(model)); }