public static Model.ToDoTaskInfoSearchQuery Convert(Client.ToDoTaskInfoSearchQuery clientQuery) { if (clientQuery == null) { throw new ArgumentNullException(nameof(clientQuery)); } var modelSort = clientQuery.Sort.HasValue ? SortTypeConverter.Convert(clientQuery.Sort.Value) : (Models.SortType?)null; var modelSortBy = clientQuery.SortBy.HasValue ? ToDoTaskSortByConverter.Convert(clientQuery.SortBy.Value) : (Model.ToDoTaskSortBy?)null; var priority = clientQuery.Priority.HasValue ? ToDoTaskPriorityConverter.Convert(clientQuery.Priority.Value) : (Model.ToDoTaskPriority?)null; return(new Model.ToDoTaskInfoSearchQuery { CreatedFrom = clientQuery.CreatedFrom, CreatedTo = clientQuery.CreatedTo, Limit = clientQuery.Limit, Offset = clientQuery.Offset, Priority = priority, EndAt = clientQuery.EndAt, Sort = modelSort, SortBy = modelSortBy }); }
private async Task BindFromUri(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) { var uriBinding = _descriptor.BindWithAttribute(new FromUriAttribute()); await uriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken); var bindedValue = GetValue(actionContext) as IClientQuery; var query = GetValue(actionContext) as IClientQuery ?? Activator.CreateInstance(_descriptor.ParameterType) as IClientQuery; if (bindedValue == null) { SetValue(actionContext, query); } var clientFilterable = query as IClientFilterable; var clientSortable = query as IClientSortable; var clientPageable = query as IClientPageable; var queryString = actionContext.Request.GetQueryNameValuePairs() .Where(x => Keys.KnownKeys.Contains(x.Key)) .ToDictionary(x => x.Key, x => (object)x.Value); var routeDataValues = actionContext.Request.GetRouteData() .Values .Where(x => Keys.KnownKeys.Contains(x.Key)); var requestValues = queryString.Union(routeDataValues).ToDictionary(x => x.Key, x => x.Value); if (queryString.ContainsKey(Keys.Filter) && clientFilterable != null) { var converter = new QueryStringFilterConverter(); var filter = (IFilter)converter.ConvertFrom(queryString[Keys.Filter]); clientFilterable.ClientFilter = filter ?? new AlwaysTrueFilter(); } if (queryString.ContainsKey(Keys.Sort) && clientSortable != null) { var converter = new SortTypeConverter(); var sort = (ISort)converter.ConvertFrom(queryString[Keys.Sort]); clientSortable.ClientSort = sort ?? clientSortable.ClientSort ?? new RandomSort(); } if ((queryString.ContainsKey(Keys.PageNumber) || queryString.ContainsKey(Keys.PageSize)) && clientPageable != null) { int pageNumber = 1, pageSize = 10; var hasNumber = requestValues.ContainsKey(Keys.PageNumber) && int.TryParse(requestValues[Keys.PageNumber].ToString(), out pageNumber); var hasSize = requestValues.ContainsKey(Keys.PageSize) && int.TryParse(requestValues[Keys.PageSize].ToString(), out pageSize); var page = new ClientPage { PageNumber = hasNumber ? (int?)pageNumber : null, PageSize = hasSize ? (int?)pageSize : null }; clientPageable.ClientPage = page; } }
public void Can_Deserialize_And_Execute_Sort_From_Query_String() { const string text = "year DESC, make ASC"; var converter = new SortTypeConverter(); var sort = (ISort)converter.ConvertFrom(text); Assert.IsNotNull(sort); Assert.IsInstanceOfType(sort, typeof(DynamicLinqSort)); var expected = Cars.OrderByDescending(x => x.Year).ThenBy(x => x.Make).ToList(); var actual = sort.ToDelegate <Car>()(Cars.AsQueryable()).ToList(); Assert.IsTrue(expected.SequenceEqual(actual)); }
/// <summary> /// Переводит запрос за заметками из клиентсокой модели в серверную /// </summary> /// <param name="clientQuery">Запрос за заметками в клиентской модели</param> /// <returns>Запрос за заметками в серверной модели</returns> public static Model.NoteInfoSearchQuery Convert(Client.NoteInfoSearchQuery clientQuery) { if (clientQuery == null) { throw new ArgumentNullException(nameof(clientQuery)); } var modelUserId = (Guid?)null; if (clientQuery.UserId != null) { if (!Guid.TryParse(clientQuery.UserId, out var userId)) { throw new ArgumentException($"The user id \"{clientQuery.UserId}\" is invalid.", nameof(clientQuery)); } modelUserId = userId; } var modelSort = clientQuery.Sort.HasValue ? SortTypeConverter.Convert(clientQuery.Sort.Value) : (Models.SortType?)null; var modelSortBy = clientQuery.SortBy.HasValue ? NoteSortByConverter.Convert(clientQuery.SortBy.Value) : (Model.NoteSortBy?)null; var modelQuery = new Model.NoteInfoSearchQuery { CreatedFrom = clientQuery.CreatedFrom, CreatedTo = clientQuery.CreatedTo, UserId = modelUserId, Favorite = clientQuery.Favorite, Limit = clientQuery.Limit, Offset = clientQuery.Offset, Sort = modelSort, SortBy = modelSortBy, Tags = clientQuery.Tags?.ToList() }; return(modelQuery); }