You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to Perform Queries Lazily

In some situations, query execution must be delayed. To cover such a scenario, Lazily and many other query extensions have been introduced.

Lazily and LazilyAsync

Lazy<IEnumerable<T>> Lazily<T>();

Lazy<IEnumerable<T>> Lazily<T>(Action<IEnumerable<T>> onEval);

Lazy<Task<IEnumerable<T>>> LazilyAsync<T>();

Lazy<Task<IEnumerable<T>>> LazilyAsync<T>(Action<IEnumerable<T>> onEval);

Parameters
onEval Action<IEnumerable<TResult>> An action that will be performed on the query results.
Return Value
Lazy<IEnumerable<TResult>> Lazy query initializer returning query results.

Example

Lazy<IEnumerable<Employee>> employeesLazy = session
    .Query<Employee>()
    .Where(x => x.FirstName == "Robert")
    .Lazily();

IEnumerable<Employee> employees = employeesLazy.Value; // query will be executed here
Lazy<Task<IEnumerable<Employee>>> employeesLazy = session
    .Query<Employee>()
    .Where(x => x.FirstName == "Robert")
    .LazilyAsync();

IEnumerable<Employee> employees = await employeesLazy.Value; // query will be executed here

Counts

Lazy<int> CountLazily<T>();

Lazy<Task<int>> CountLazilyAsync<T>(CancellationToken token = default(CancellationToken));

Return Value
Lazy Lazy query initializer returning a count of matched documents.

Example

Lazy<int> countLazy = session
    .Query<Employee>()
    .Where(x => x.FirstName == "Robert")
    .CountLazily();

int count = countLazy.Value; // query will be executed here

Suggestions

Lazy<Dictionary<string, SuggestionResult>> ExecuteLazy(Action<Dictionary<string, SuggestionResult>> onEval = null);

Lazy<Task<Dictionary<string, SuggestionResult>>> ExecuteLazyAsync(Action<Dictionary<string, SuggestionResult>> onEval = null, CancellationToken token = default);

Return Value
Lazy<Dictionary<string, SuggestionResult>> Lazy query initializer containing a dictionary with suggestions for matching executed query

Example

Lazy<Dictionary<string, SuggestionResult>> suggestLazy = session
    .Query<Employee>("Employees_ByFullName")
    .SuggestUsing(builder => builder.ByField("FullName", "johne"))
    .ExecuteLazy();

Dictionary<string, SuggestionResult> suggest = suggestLazy.Value; // query will be executed here
List<string> suggestions = suggest["FullName"].Suggestions;

Facets

Lazy<Dictionary<string, FacetResult>> ExecuteLazy(Action<Dictionary<string, FacetResult>> onEval = null);

Lazy<Task<Dictionary<string, FacetResult>>> ExecuteLazyAsync(Action<Dictionary<string, FacetResult>> onEval = null, CancellationToken token = default);

Return Value
Lazy<Dictionary<string, FacetResult>> Lazy query initializer containing a dictionary with facet results matching executed query

Example

Lazy<Dictionary<string, FacetResult>> facetsLazy = session
    .Query<Camera>("Camera/Costs")
    .AggregateUsing("facets/CameraFacets")
    .ExecuteLazy();

Dictionary<string, FacetResult> facets = facetsLazy.Value; // query will be executed here
FacetResult results = facets["Manufacturer"];