internal static IQueryable Deserialize(IQueryable query, IEnumerable <ServiceQueryPart> queryParts, QueryResolver queryResolver) { if (query == null) { throw Error.ArgumentNull("query"); } if (queryParts == null) { throw Error.ArgumentNull("queryParts"); } foreach (ServiceQueryPart part in queryParts) { switch (part.QueryOperator) { case "filter": try { query = DynamicQueryable.Where(query, part.Expression, queryResolver); } catch (ParseException e) { throw new ParseException( Error.Format(SRResources.ParseErrorInClause, "$filter", e.Message)); } break; case "orderby": try { query = DynamicQueryable.OrderBy(query, part.Expression, queryResolver); } catch (ParseException e) { throw new ParseException( Error.Format(SRResources.ParseErrorInClause, "$orderby", e.Message)); } break; case "skip": try { int skipCount = Convert.ToInt32(part.Expression, System.Globalization.CultureInfo.InvariantCulture); if (skipCount < 0) { throw new ParseException( Error.Format(SRResources.PositiveIntegerExpectedForODataQueryParameter, "$skip", part.Expression)); } query = DynamicQueryable.Skip(query, skipCount); } catch (FormatException e) { throw new ParseException( Error.Format(SRResources.ParseErrorInClause, "$skip", e.Message)); } break; case "top": try { int topCount = Convert.ToInt32(part.Expression, System.Globalization.CultureInfo.InvariantCulture); if (topCount < 0) { throw new ParseException( Error.Format(SRResources.PositiveIntegerExpectedForODataQueryParameter, "$top", part.Expression)); } query = DynamicQueryable.Take(query, topCount); } catch (FormatException e) { throw new ParseException( Error.Format(SRResources.ParseErrorInClause, "$top", e.Message)); } break; } } return(query); }
public IQueryable Take(IQueryable source, int count) { return(DynamicQueryable.Take(source, count)); }