Skip to content

Commit d1e67cb

Browse files
Refactor README
1 parent c2d142f commit d1e67cb

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

README.md

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ dotnet add package GoatQuery.AspNetCore # For ASP.NET Core integration
1515
// Basic filtering
1616
var 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
2121
var 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
2626
var 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

206197
Implement custom search logic:
@@ -233,7 +224,7 @@ public IActionResult GetUsers() => Ok(dbContext.Users);
233224
public 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);
246237
if (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();
250241
var count = result.Value.Count; // If Count = true
251242
```
252243

253244
## Development
254245

246+
### Test
255247
```bash
256248
dotnet test ./src/GoatQuery/tests
257-
dotnet build --configuration Release
249+
```
250+
251+
### Run the example project
252+
253+
```bash
258254
cd example && dotnet run
259255
```
260256

0 commit comments

Comments
 (0)