You are currently browsing legacy 3.0 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 scenario Lazily and many others query extensions has been introduced.

Lazily and LazilyAsync

Lazy<IEnumerable<T>> Lazily<T>(
	this IQueryable<T> source) { ... }

Lazy<IEnumerable<T>> Lazily<T>(
	this IQueryable<T> source,
	Action<IEnumerable<T>> onEval) { ... }

Lazy<Task<IEnumerable<T>>> LazilyAsync<T>(
	this IQueryable<T> source) { ... }

Lazy<Task<IEnumerable<T>>> LazilyAsync<T>(
	this IQueryable<T> source,
	Action<IEnumerable<T>> onEval) { ... }

Parameters
onEval Action<IEnumerable<TResult>> Action that will be performed on 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

or

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

CountLazily

Lazy<int> CountLazily<T>(
	this IRavenQueryable<T> source) { ... }

Return Value
Lazy<IEnumerable<TResult>> Lazy query initializer returning 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

SuggestLazy

Lazy<SuggestionQueryResult> SuggestLazy(
	this IQueryable queryable) { ... }

Lazy<SuggestionQueryResult> SuggestLazy(
	this IQueryable queryable,
	SuggestionQuery query) { ... }

Parameters
query SuggestionQuery A suggestion query definition containing all information required to query a specified index.
Return Value
Lazy<SuggestionQueryResult> Lazy query initializer containing array of all suggestions for executed query.

Example

Lazy<SuggestionQueryResult> suggestLazy = session
	.Query<Employee>()
	.SuggestLazy();

SuggestionQueryResult suggest = suggestLazy.Value; // query will be executed here
string[] suggestions = suggest.Suggestions;

ToFacetsLazy

Lazy<FacetResults> ToFacetsLazy<T>(
	this IQueryable<T> queryable,
	string facetSetupDoc,
	int start = 0,
	int? pageSize = null) { ... }

Lazy<FacetResults> ToFacetsLazy<T>(
	this IQueryable<T> queryable,
	IEnumerable<Facet> facets,
	int start = 0,
	int? pageSize = null) { ... }

Parameters
facets List<Facet> List of facets required to perform a facet query (mutually exclusive with facetSetupDoc).
facetSetupDoc string Document key that contains predefined FacetSetup (mutually exclusive with facets).
start int number of results that should be skipped. Default: 0.
pageSize int maximum number of results that will be retrieved. Default: null.
Return Value
Lazy<FacetResults> Lazy query initializer containing Facet query results with query Duration and list of Results - one entry for each term/range as specified in [FacetSetup] document or passed in parameters.

Example

Lazy<FacetResults> facetsLazy = session
	.Query<Camera>("Camera/Costs")
	.ToFacetsLazy("facets/CameraFacets");

FacetResults facets = facetsLazy.Value; // query will be executed here
Dictionary<string, FacetResult> results = facets.Results;