The full query surface, documented.
Every operation in ServiceQuery® JSON with examples, plus provider notes and known limitations.
ServiceQuery® vs Alternatives
Honest positioning — when they win, when we win.
Skip the Configuration
vs OData
No EDM models. No special endpoints. No complex pipeline setup. Just JSON POST to any controller. Works with MongoDB and Cosmos — OData doesn't.
Minutes, Not Days
vs GraphQL
No schema definition. No resolvers. No type system overhead. Works from any HTTP client. Same IQueryable you already have.
Client Queries, Zero Risk
vs Raw SQL
Let clients build dynamic queries without exposing raw SQL. LINQ expressions from parsed data — injection is architecturally impossible.
Complete Operations Reference
All query operations available in ServiceQuery®.
Aggregates
- Count
- Sum
- Average
- Minimum
- Maximum
Comparison
- Equal
- Not Equal
- Greater Than
- Greater Than or Equal
- Less Than
- Less Than or Equal
- Between
- In Set
- Not In Set
String
- Contains
- StartsWith
- EndsWith
Nullability
- Is Null
- Is Not Null
Logic
- And
- Or
- Begin (grouping)
- End (grouping)
Sorting
- Sort Ascending
- Sort Descending
Paging
- Page Number
- Page Size
- Include Count
Selection
- Select (projection)
- Distinct
Not all providers support all operations. See provider matrix below.
Provider Compatibility
"Supports MongoDB" is meaningless without the fine print. Here's what works where.
If your use case depends on a missing piece, you should know that before you adopt it.
| Provider | Filter | Sort | Page | Aggregates | Notes |
|---|---|---|---|---|---|
| SQL Server | Full support via EFC | ||||
| PostgreSQL | Full support via EFC | ||||
| MySQL | Full support via EFC | ||||
| SQLite | Full support via EFC | ||||
| MongoDB (ServiceQuery) | Full support via ServiceQuery.MongoDb NuGet package | ||||
| Cosmos DB | Some aggregate limitations | ||||
| Azure Data Tables (basic) | Aggregates, string comparisons and sorting not supported | ||||
| Azure Data Tables (ServiceQuery) | Full support via ServiceQuery.AzureDataTables NuGet package | ||||
| In-Memory | Async not supported, case-sensitive |
Full support | Partial support | Not supported
Detailed Comparison
When they win, when we win.
| Aspect | OData | GraphQL | ServiceQuery® |
|---|---|---|---|
| Setup complexity | High (EDM, pipeline) | High (schema, resolvers) | Low (NuGet + Execute) |
| Protocol surface | Full protocol | Full protocol | Minimal (JSON POST) |
| NoSQL support | Limited | Yes | Yes |
| Schema discovery | Yes ($metadata) | Yes (introspection) | No |
| Nested graphs | Yes | Yes | No |
| Learning curve | Steep | Steep | Shallow |
When not to use ServiceQuery®: If you need clients to discover a schema, build nested graphs, or do deep relationship traversal, ServiceQuery® isn't the tool. GraphQL exists for a reason.
Frequently Asked
Common questions, straight answers.
Why not OData?
OData is a full protocol with EDM models, special endpoints, and pipeline configuration. Great when you need that. ServiceQuery® is for the common case where you just want filter/sort/page without adopting a protocol.
Why not GraphQL?
GraphQL solves over/under-fetching with schema-driven queries and nested graphs. If you need that, use it. ServiceQuery® is scoped to list endpoints — flat queries, not graph traversal.
Can I prevent querying certain fields?
Yes. Use field allowlists to define exactly which fields are queryable. See Security & Guardrails.
Does it support joins or navigation properties?
No. ServiceQuery® is scoped to flat list queries. If you need nested relationships or graph traversal, consider GraphQL or include the data in your DTO.
Does it handle nulls and case-sensitivity?
Yes but operations supported are provider-dependent. Case sensitivity depends on your collation, the In-Memory provider is case-senstitive. Azure Data Tables doesn't support aggregates, string comparisons, or sorting, by default. Test your specific queries on your specific provider.
Ready to build?
Get started in 10 minutes or try the interactive demo.