@@ -15,19 +15,19 @@ dotnet add package GoatQuery.AspNetCore # For ASP.NET Core integration
1515// Basic filtering
1616var users = dbContext .Users
1717 .Apply (new Query { Filter = " age gt 18 and isActive eq true" })
18- .Value .Results ;
18+ .Value .Query ;
1919
2020// Lambda expressions for collection filtering
2121var usersWithLondonAddress = dbContext .Users
2222 .Apply (new Query { Filter = " addresses/any(x: x/city eq 'London')" })
23- .Value .Results ;
23+ .Value .Query ;
2424
2525// Complex nested filtering
2626var activeUsersWithHighValueOrders = dbContext .Users
2727 .Apply (new Query {
2828 Filter = " isActive eq true and orders/any(o: o/items/any(i: i/price gt 1000))"
2929 })
30- .Value .Results ;
30+ .Value .Query ;
3131
3232// ASP.NET Core integration
3333 [HttpGet ]
@@ -38,18 +38,18 @@ public IActionResult GetUsers() => Ok(dbContext.Users);
3838## Supported Syntax
3939
4040```
41- GET /api/users?$ filter=age gt 18 and isActive eq true
42- GET /api/users?$ filter=addresses/any(x: x/city eq 'London')
43- GET /api/users?$ orderby=lastName asc, firstName desc
44- GET /api/users?$ top=10&$ skip=20&$ count=true
45- GET /api/users?$ search=john
41+ GET /api/users?filter=age gt 18 and isActive eq true
42+ GET /api/users?filter=addresses/any(x: x/city eq 'London')
43+ GET /api/users?orderby=lastName asc, firstName desc
44+ GET /api/users?top=10&skip=20&count=true
45+ GET /api/users?search=john
4646```
4747
4848## Filtering
4949
5050### Basic Operators
5151
52- - ** Comparison** : ` eq ` , ` ne ` , ` gt ` , ` ge ` , ` lt ` , ` le `
52+ - ** Comparison** : ` eq ` , ` ne ` , ` gt ` , ` gte ` , ` lt ` , ` lte `
5353- ** Logical** : ` and ` , ` or `
5454- ** String** : ` contains `
5555
@@ -88,7 +88,7 @@ Access nested properties using forward slash (`/`) syntax:
8888- String: ` 'value' `
8989- Numbers: ` 42 ` , ` 3.14f ` , ` 2.5m ` , ` 1.0d `
9090- Boolean: ` true ` , ` false `
91- - DateTime: ` 2023-12-25T10:30:00Z `
91+ - DateTime: ` 2023-12-25T10:30:00Z ` , ` 2023-12-25 `
9292- GUID: ` 123e4567-e89b-12d3-a456-426614174000 `
9393- Null: ` null `
9494
@@ -145,13 +145,11 @@ public class AddressDto
145145** Query Examples:**
146146
147147```
148- $ filter=first_name eq 'John' and age gt 18
149- $ filter=addresses/any(x: x/street_address contains 'Main St')
150- $ filter=profile/address/city eq 'London'
148+ filter=first_name eq 'John' and age gt 18
149+ filter=addresses/any(x: x/street_address contains 'Main St')
150+ filter=profile/address/city eq 'London'
151151```
152152
153- ** Property mapping works automatically** - GoatQuery maps JSON property names to .NET properties for all navigation paths and lambda expressions.
154-
155153## Advanced Features
156154
157155### Lambda Expression Support
@@ -194,13 +192,6 @@ GoatQuery automatically generates null-safe expressions for property navigation:
194192// Generated: user.Profile != null && user.Profile.Address != null && user.Profile.Address.City == "London"
195193```
196194
197- ### Type Safety and Performance
198-
199- - ** Strong typing** : All expressions are strongly typed using .NET reflection
200- - ** Compiled expressions** : Queries compile to efficient LINQ expressions
201- - ** Database translation** : Works with Entity Framework for database-level filtering
202- - ** Memory efficiency** : Minimal allocations during expression building
203-
204195## Search
205196
206197Implement custom search logic:
@@ -233,7 +224,7 @@ public IActionResult GetUsers() => Ok(dbContext.Users);
233224public IActionResult GetUsers ([FromQuery ] Query query )
234225{
235226 var result = dbContext .Users .Apply (query );
236- return result .IsFailed ? BadRequest (result .Errors ) : Ok (result .Value );
227+ return result .IsFailed ? BadRequest (result .Errors ) : Ok (result .Value . Query . ToList () );
237228}
238229```
239230
@@ -246,15 +237,20 @@ var result = users.Apply(query);
246237if (result .IsFailed )
247238 return BadRequest (result .Errors .Select (e => e .Message ));
248239
249- var data = result .Value .Results ;
240+ var data = result .Value .Query . ToList () ;
250241var count = result .Value .Count ; // If Count = true
251242```
252243
253244## Development
254245
246+ ### Test
255247``` bash
256248dotnet test ./src/GoatQuery/tests
257- dotnet build --configuration Release
249+ ```
250+
251+ ### Run the example project
252+
253+ ``` bash
258254cd example && dotnet run
259255```
260256
0 commit comments