---
title: "init(filter:sort:order:animation:)"
framework: swiftdata
role: symbol
role_heading: Initializer
path: "swiftdata/query/init(filter:sort:order:animation:)-1qfoj"
---

# init(filter:sort:order:animation:)

Creates a query with a predicate, a key path to a property for sorting, and the order to sort by.

## Declaration

```swift
@MainActor @preconcurrency init<Value>(filter: Predicate<Element>? = nil, sort keyPath: KeyPath<Element, Value?>, order: SortOrder = .forward, animation: Animation) where Result == [Element], Value : Comparable
```

## Parameters

- `filter`: A predicate on Element
- `sort`: Key path to property used for sorting.
- `order`: Whether to sort in forward or reverse order.
- `animation`: The animation to use for user interface changes that result from changes to the fetched results.

## Discussion

Discussion Use Query within a view by wrapping the variable for the query’s result: struct RecipeList: View {     // Recipes sorted by date of creation     @Query(sort: \.dateCreated)     var favoriteRecipes: [Recipe]

var body: some View {         List(favoriteRecipes) { RecipeDetails($0) }     } }

## See Also

### Creating a query

- [init(_:animation:)](swiftdata/query/init(_:animation:).md)
- [init(filter:sort:animation:)](swiftdata/query/init(filter:sort:animation:).md)
- [init(filter:sort:order:animation:)](swiftdata/query/init(filter:sort:order:animation:)-3qovd.md)
- [init(_:transaction:)](swiftdata/query/init(_:transaction:).md)
- [init(filter:sort:transaction:)](swiftdata/query/init(filter:sort:transaction:).md)
- [init(filter:sort:order:transaction:)](swiftdata/query/init(filter:sort:order:transaction:)-2bx9a.md)
- [init(filter:sort:order:transaction:)](swiftdata/query/init(filter:sort:order:transaction:)-8q7vs.md)
