Skip to main content

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.

Supported Database Providers

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.