private IEnumerable <AuditTrail> SortData(GetAuditTrailsRequest request, IDictionary <string, SortOrder> sortingDictionary, out int TotalRecords) { var data = DataContext.AuditTrails.Include(x => x.User).AsQueryable(); if (!string.IsNullOrEmpty(request.Search) && !string.IsNullOrWhiteSpace(request.Search)) { data = data.Where(x => x.TableName.Contains(request.Search) || x.Action.Contains(request.Search) || x.ActionName.Contains(request.Search) || x.ControllerName.Contains(request.Search) || x.NewValue.Contains(request.Search) || x.OldValue.Contains(request.Search)); } if (request.StartDate != null) { data = data.Where(x => DbFunctions.TruncateTime(x.UpdateDate) >= request.StartDate.Date); } if (request.EndDate != null) { data = data.Where(x => DbFunctions.TruncateTime(x.UpdateDate) <= request.EndDate.Date); } //data = data.GroupBy(x => x.RecordId).Select(y => y.OrderByDescending(x => x.UpdateDate).FirstOrDefault()) // .OrderByDescending(x => x.UpdateDate).Include(x => x.User); foreach (var sortOrder in sortingDictionary) { switch (sortOrder.Key) { case "User": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.UpdateDate).ThenBy(x => x.User.Username) : data.OrderByDescending(x => x.UpdateDate).ThenByDescending(x => x.User.Username); break; case "TableName": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.UpdateDate).ThenBy(x => x.TableName) : data.OrderByDescending(x => x.UpdateDate).ThenByDescending(x => x.TableName); break; case "Controller": data = sortOrder.Value == SortOrder.Ascending ? data.OrderByDescending(x => x.UpdateDate).ThenBy(x => x.ControllerName) : data.OrderByDescending(x => x.UpdateDate).ThenByDescending(x => x.ControllerName); break; default: data = data.OrderByDescending(x => x.UpdateDate); break; } } TotalRecords = data.Count(); return(data); }
public AuditTrailsResponse GetAuditTrails(GetAuditTrailsRequest request) { int totalRecords; var data = SortData(request, request.SortingDictionary, out totalRecords); if (request.Take != -1) { data = data.Skip(request.Skip).Take(request.Take); } return(new AuditTrailsResponse { TotalRecords = totalRecords, AuditTrails = data.ToList().MapTo <AuditTrailsResponse.AuditTrail>() }); }