Issue search is centered on one consistent shape:
var issues = await client.Issues.Query()
.ForSpace("PROJ")
.OpenSprints()
.AssignedToCurrentUser()
.Take(50)
.ToListAsync();
The fluent API keeps normal Jira automation readable while still allowing raw JQL when a workflow needs the full Jira language.
Use fluent helpers for common Jira concepts.
var activeWork = await client.Issues.Query()
.ForSpace("PROJ")
.OpenSprints()
.WatchedByCurrentUser()
.WithAttachments()
.Take(100)
.ToListAsync();
Useful helper groups include:
| Area | Examples |
|---|---|
| Scope | ForSpace, ForIssueType, ForPriority, ForResolution |
| Assignment | AssignedToCurrentUser, AssignedTo, Unassigned |
| Agile | OpenSprints, ClosedSprints, FutureSprints |
| Labels | WithLabel, WithoutLabel |
| Dates | CreatedAfter, CreatedBefore, UpdatedAfter, UpdatedBefore |
| Due dates | Overdue, DueBefore, DueAfter |
| Relationships | WatchedByCurrentUser, WithAttachments |
| Custom fields | ForCustomField |
Readable filters make recurring triage jobs easier to review.
var staleUnassigned = await client.Issues.Query()
.ForSpace("PROJ")
.Unassigned()
.UpdatedBefore(DateTime.UtcNow.AddDays(-14))
.WithoutLabel("ignore")
.ToListAsync();
var overdueHighPriority = await client.Issues.Query()
.ForSpace("PROJ")
.Overdue()
.ForPriority("High", "Highest")
.ToListAsync();
Use Where when the filter is clearer as a typed expression.
var recentDone = await client.Issues.Query()
.Where(x => x.Space == "PROJ" &&
x.Status == "Done" &&
x.Created >= DateTime.UtcNow.AddDays(-30))
.OrderByDescending(x => x.Created)
.ToListAsync();
This is useful for simple filters that map well to issue properties and should stay type checked in application code.
Use raw JQL when Jira already expresses the workflow best.
var result = await client.Issues.SearchAsync(
"project = PROJ AND statusCategory != Done ORDER BY updated DESC",
maxResults: 50);
Raw JQL is also useful while migrating existing Jira reports or automation rules into application code.
Issue search uses Jira Cloud's /rest/api/3/search/jql endpoint and the nextPageToken paging model. The client handles paging behind query materialization methods such as ToListAsync().
JiraClientOptions.MaxPageSize caps request page size. The default is 300.
| Use | When |
|---|---|
| Fluent helpers | The query is a normal operational workflow and should be easy to scan. |
| Typed predicates | The filter maps cleanly to typed issue properties. |
| Raw JQL | The workflow needs Jira-specific syntax that should remain explicit. |