private IEnumerable <AuditUser> GetAuditUserData(GetAuditUsersRequest request, IDictionary <string, SortOrder> sortingDictionary, out int TotalRecords) { var data = DataContext.AuditUsers.AsQueryable(); if (request.LoginId.HasValue && request.LoginId != default(int)) { data = data.Where(x => x.UserLogin.Id == request.LoginId); } if (!string.IsNullOrEmpty(request.Search) && !string.IsNullOrWhiteSpace(request.Search)) { data = data.Where(x => x.Url.Contains(request.Search) || x.ActionName.Contains(request.Search) || x.ControllerName.Contains(request.Search) || x.UserLogin.User.Username.Contains(request.Search)); } //if (request.StartDate != null) //{ // data = data.Where(x => x.TimeAccessed >= request.StartDate); //} //if (request.EndDate != null) //{ // data = data.Where(x => x.TimeAccessed <= request.EndDate); //} //data = data.GroupBy(x => x.UserLogin.Id).Select(y => y.OrderByDescending(x => x.TimeAccessed).FirstOrDefault()) // .OrderByDescending(x => x.TimeAccessed).Include(x => x.UserLogin).Include(x => x.UserLogin.User); foreach (var sortOrder in sortingDictionary) { switch (sortOrder.Key) { case "User": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.TimeAccessed).ThenBy(x => x.UserLogin.User.Username) : data.OrderByDescending(x => x.TimeAccessed).ThenByDescending(x => x.UserLogin.User.Username); break; case "ActionName": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.TimeAccessed).ThenBy(x => x.ActionName) : data.OrderByDescending(x => x.TimeAccessed).ThenByDescending(x => x.ActionName); break; case "Controller": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.TimeAccessed).ThenBy(x => x.ControllerName) : data.OrderByDescending(x => x.TimeAccessed).ThenByDescending(x => x.ControllerName); break; default: data = data.OrderByDescending(x => x.TimeAccessed); break; } } TotalRecords = data.Count(); return(data); }
public AuditUsersResponse GetAuditUsers(GetAuditUsersRequest request) { int totalRecords; var data = GetAuditUserData(request, request.SortingDictionary, out totalRecords); if (request.Take != -1) { data = data.Skip(request.Skip).Take(request.Take); } return(new AuditUsersResponse { TotalRecords = totalRecords, AuditUsers = data.ToList().MapTo <AuditUsersResponse.AuditUser>() }); }