---
title: "init(filter:sort:transaction:)"
framework: swiftdata
role: symbol
role_heading: Initializer
path: "swiftdata/query/init(filter:sort:transaction:)"
---

# init(filter:sort:transaction:)

Create a query with a predicate, and a list of sort descriptors.

## Declaration

```swift
@MainActor @preconcurrency init(filter: Predicate<Element>? = nil, sort descriptors: [SortDescriptor<Element>] = [], transaction: Transaction? = nil) where Result == [Element]
```

## Parameters

- `filter`: A predicate on Element
- `descriptors`: Sort orders for the result.
- `transaction`: A transaction 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 {     // Favorite recipes sorted by date of creation     @Query(         filter: #Predicate { $0.isFavorite == true },         sort: [SortDescriptor(\.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:)-1qfoj.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: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)
