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
// Define a lazy query
Lazy<IEnumerable<Employee>> lazyEmployees = session
.Query<Employee>()
.Where(x => x.FirstName == "Robert")
// Add a call to 'Lazily'
.Lazily();
IEnumerable<Employee> employees = lazyEmployees.Value; // Query is executed here
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
// Define a lazy query
Lazy<Task<IEnumerable<Employee>>> lazyEmployees = asyncSession
.Query<Employee>()
.Where(x => x.FirstName == "Robert")
// Add a call to 'LazilyAsync'
.LazilyAsync();
IEnumerable<Employee> employees = await lazyEmployees.Value; // Query is executed here
or
// Define a lazy DocumentQuery
Lazy<IEnumerable<Employee>> lazyEmployees = session.Advanced
.DocumentQuery<Employee>()
.WhereEquals(x => x.FirstName, "Robert")
// Add a call to 'Lazily'
.Lazily();
IEnumerable<Employee> employees = lazyEmployees.Value; // DocumentQuery is executed here
CountLazily
// Define a lazy count query
Lazy<int> lazyCount = session
.Query<Employee>()
.Where(x => x.FirstName == "Robert")
// Add a call to 'CountLazily'
.CountLazily();
int count = lazyCount.Value; // Query is executed here
Return Value | |
---|---|
Lazy<IEnumerable<TResult>> | Lazy query initializer returning count of matched documents. |
Example
// Define a lazy count query
Lazy<Task<int>> lazyCount = asyncSession
.Query<Employee>()
.Where(x => x.FirstName == "Robert")
// Add a call to 'CountLazilyAsync'
.CountLazilyAsync();
int count = await lazyCount.Value; // Query is executed here
SuggestLazy
// Define a lazy DocumentQuery
Lazy<int> lazyCount = session.Advanced
.DocumentQuery<Employee>()
.WhereEquals(x => x.FirstName, "Robert")
// Add a call to 'CountLazily'
.CountLazily();
int count = lazyCount.Value; // DocumentQuery is executed here
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
// Define a lazy suggestion query
Lazy<Dictionary<string, SuggestionResult>> lazySuggestions = session
.Query<Product>()
.SuggestUsing(builder => builder.ByField(x => x.Name, "chaig"))
// Add a call to 'ExecuteLazy'
.ExecuteLazy();
Dictionary<string, SuggestionResult> suggest = lazySuggestions.Value; // Query is executed here
List<string> suggestions = suggest["Name"].Suggestions;
ToFacetsLazy
// Define a lazy suggestion query
Lazy<Task<Dictionary<string, SuggestionResult>>> lazySuggestions = asyncSession
.Query<Employee>()
.SuggestUsing(builder => builder.ByField("Name", "chaig"))
// Add a call to 'ExecuteLazyAsync'
.ExecuteLazyAsync();
Dictionary<string, SuggestionResult> suggest = await lazySuggestions.Value; // Query is executed here
List<string> suggestions = suggest["Name"].Suggestions;
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
// Define a lazy DocumentQuery
Lazy<Dictionary<string, SuggestionResult>> lazySuggestions = session.Advanced
.DocumentQuery<Employee>()
.SuggestUsing(builder => builder.ByField("Name", "chaig"))
// Add a call to 'ExecuteLazy'
.ExecuteLazy();
Dictionary<string, SuggestionResult> suggest = lazySuggestions.Value; // DocumentQuery is executed here
List<string> suggestions = suggest["FullName"].Suggestions;