/// <summary> /// Returns all <see cref="IEnumerable<UserDocument>">users</see> matching <paramref name="filter"/>. /// </summary> /// <remarks> /// <see cref="string.StartsWith"/> is used for matching. /// </remarks> public IEnumerable <UserSummary> Find(UserSearchFilter filter, UserSearchOrderBy orderBy) { Guard.ArgumentNotNull(filter, nameof(filter)); Guard.ArgumentNotNull(orderBy, nameof(orderBy)); var queryable = AsQueryable(); // Assuming filter conditions are or'd as most reasonable. // Any other filtering would have to be defined at the requirements level. var results = queryable.Where(u => (!string.IsNullOrEmpty(filter.FirstName) && u.FirstName.StartsWith(filter.FirstName)) || (!string.IsNullOrEmpty(filter.LastName) && u.LastName.StartsWith(filter.LastName)) || (filter.HasUserEverConnected && u.LastConnectionDate != null) || (!filter.HasUserEverConnected && u.LastConnectionDate == null) ); // Assuming the orderings are mutually exclusive. // Any other logic would have to be defined at the requirements level. if (orderBy.LastConnectionDate) { results.OrderBy(u => u.LastConnectionDate); } else if (orderBy.CreationDate) { results.OrderBy(u => u.Audit.CreationDate); } else if (orderBy.LastName) { results.OrderBy(u => u.LastName); } var summary = results.ToList().Select(r => mapper.Map <UserSummary>(r)); return(summary); }
public IEnumerable <UserSummary> Find( [FromBody] UserSearchFilter filter, [FromQuery(Name = "orderByLastName")] bool orderByLastName, [FromQuery(Name = "orderByCreationDate")] bool orderByCreationDate, [FromQuery(Name = "orderByLastConnectionDate")] bool orderByLastConnectionDate) { var orderBy = new UserSearchOrderBy { LastName = orderByLastName, CreationDate = orderByCreationDate, LastConnectionDate = orderByLastConnectionDate }; return(service.Find(filter, orderBy)); }