---
title: "Class QueryingClientBase"
slug: "sdk--stylelabs.m.sdk.models.clients.queryingclientbase"
abstract: ""
---
# Class QueryingClientBase

Base class for querying clients.

## Inheritance

object

QueryingClientBase

## Implements

[IQueryingClient](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.clients.iqueryingclient.html)

## Namespace: StylelabsStylelabs.MSdkStylelabs.M.Sdk.ModelsClients

## Assembly: Stylelabs.M.Sdk.dll

## Syntax

```csharp
public abstract class QueryingClientBase : IQueryingClient
```

## Constructors

### QueryingClientBase(IMClient)

Initializes a new instance of the [QueryingClientBase](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.models.clients.queryingclientbase.html) class.

#### Declaration

```csharp
protected QueryingClientBase(IMClient client)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [IMClient](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.imclient.html) | client | The client. |

## Methods

### CreateEntityIdIterator(Query)

Creates an [IEntityIterator](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityiterator.html) that iterates over all ids matched by the [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html).

#### Declaration

```csharp
public IIdIterator CreateEntityIdIterator(Query query)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to iterate. |

#### Returns

| Type | Description |
| --- | --- |
| [IIdIterator](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iiditerator.html) | An iterator. |

### CreateEntityIdScroller(Query, TimeSpan?)

Creates an [IIdScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iidscroller.html) that scrolls over all ids of entities that match the [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html).

#### Declaration

```csharp
public IIdScroller CreateEntityIdScroller(Query query, TimeSpan? scrollTime = null)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to scroll. |
| TimeSpan | scrollTime | The time for the scroll to live. If it is not specified, [ScrollTime](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.defaults.scrolling.html) will be used. The scroll time should not be too long, just enough to process each batch of results. |

#### Returns

| Type | Description |
| --- | --- |
| [IIdScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iidscroller.html) | An [IIdScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iidscroller.html) instance. |

#### Remarks

Use scrolling wisely and try to limit the `scrollTime` for the scroll to live. Using scrolling inappropriately can cause performance issues. See [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html) for more information.

### CreateEntityIterator(Query, IEntityLoadConfiguration)

Creates an [IEntityIterator](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityiterator.html) that iterates over all results matched by the [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html).

#### Declaration

```csharp
public IEntityIterator CreateEntityIterator(Query query, IEntityLoadConfiguration loadConfiguration = null)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to iterate. |
| [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html) | loadConfiguration | The load configuration. If it is null, then [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html) will be used. |

#### Returns

| Type | Description |
| --- | --- |
| [IEntityIterator](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityiterator.html) | An iterator. |

#### Remarks

For compatibility with the 3.0 SDK, the loading configuration is resolved as follows:

1. The `loadConfiguration` will be used, if not null.
2. The [IQueryLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.iqueryloadconfiguration.html) from the `query` will be used, if not null and if applicable.
3. Otherwise, defaults to [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html).

### CreateEntityScroller(Query, TimeSpan?, IEntityLoadConfiguration)

Creates an [IEntityScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityscroller.html) that scrolls over all entities that match the [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html).

#### Declaration

```csharp
public IEntityScroller CreateEntityScroller(Query query, TimeSpan? scrollTime = null, IEntityLoadConfiguration loadConfiguration = null)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to scroll. |
| TimeSpan | scrollTime | The time for the scroll to live. If it is not specified, [ScrollTime](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.defaults.scrolling.html) will be used. The scroll time should not be too long, just enough to process each batch of results. |
| [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html) | loadConfiguration | The load configuration. If it is null, then [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html) will be used. |

#### Returns

| Type | Description |
| --- | --- |
| [IEntityScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityscroller.html) | An [IEntityScroller](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityscroller.html) instance. |

#### Remarks

Use scrolling wisely and try to limit the `scrollTime` for the scroll to live. Using scrolling inappropriately can cause performance issues. See [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html) for more information.

### GetEntityScrollEngine()

Gets the implementation specific scrolling engine for entity retrieval.

#### Declaration

```csharp
protected abstract IScrollEngine<IEntityScrollResult> GetEntityScrollEngine()
```

#### Returns

| Type | Description |
| --- | --- |
| [IScrollEngine](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iscrollengine-1.html)[IEntityScrollResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityscrollresult.html) | A [IScrollEngine<T>](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iscrollengine-1.html). |

### GetIdScrollEngine()

Gets the implementation specific scrolling engine for id retrieval.

#### Declaration

```csharp
protected abstract IScrollEngine<IIdScrollResult> GetIdScrollEngine()
```

#### Returns

| Type | Description |
| --- | --- |
| [IScrollEngine](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iscrollengine-1.html)[IIdScrollResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iidscrollresult.html) | A [IScrollEngine<T>](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iscrollengine-1.html). |

### QueryAsync(Query, IEntityLoadConfiguration)

Retrieves entities matching the `query`.

#### Declaration

```csharp
public abstract Task<IEntityQueryResult> QueryAsync(Query query, IEntityLoadConfiguration loadConfiguration = null)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to execute. |
| [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html) | loadConfiguration | The load configuration. If it is null, then [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html) will be used. |

#### Returns

| Type | Description |
| --- | --- |
| Task<>[IEntityQueryResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityqueryresult.html) | An [IEntityQueryResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityqueryresult.html) containing the results of the query. |

#### Remarks

For compatibility with the 3.0 SDK, the loading configuration is resolved as follows:

1. The `loadConfiguration` will be used, if not null.
2. The [IQueryLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.iqueryloadconfiguration.html) from the `query` will be used, if not null and if applicable.
3. Otherwise, defaults to [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html).

### QueryIdsAsync(Query)

Retrieves the ids of entities matching the `query`.

#### Declaration

```csharp
public abstract Task<IIdQueryResult> QueryIdsAsync(Query query)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to execute. |

#### Returns

| Type | Description |
| --- | --- |
| Task<>[IIdQueryResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.iidqueryresult.html) | An [IEntityQueryResult](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.querying.ientityqueryresult.html) containing the results of the query. |

### ResolveLoadConfiguration(Query, IEntityLoadConfiguration)

This is used to get a valid entity load config from a query for compatibility with the 3.0 SDK.

Situation: in 3.0 we only had the query as parameter in the query client, and the load config was on the query. In 3.1 we have the query and optional load config from as parameter.

For compatibility, the query load config needs priority if the load config was not specified as parameter.

#### Declaration

```csharp
protected static IQueryLoadConfiguration ResolveLoadConfiguration(Query query, IEntityLoadConfiguration loadConfiguration)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html). |
| [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html) | loadConfiguration | The [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html). |

#### Returns

| Type | Description |
| --- | --- |
| [IQueryLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.iqueryloadconfiguration.html) | A [IQueryLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.iqueryloadconfiguration.html). |

### SingleAsync(Query, IEntityLoadConfiguration)

Gets a single entity that matches the query.

#### Declaration

```csharp
public Task<IEntity> SingleAsync(Query query, IEntityLoadConfiguration loadConfiguration = null)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to execute. |
| [IEntityLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.ientityloadconfiguration.html) | loadConfiguration | The load configuration. If it is null, then [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html) will be used. |

#### Returns

| Type | Description |
| --- | --- |
| Task<>[IEntity](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.contracts.base.ientity.html) | The entity that matches the query or null if there are no results. |

#### Remarks

For compatibility with the 3.0 SDK, the loading configuration is resolved as follows:

1. The `loadConfiguration` will be used, if not null.
2. The [IQueryLoadConfiguration](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.iqueryloadconfiguration.html) from the `query` will be used, if not null and if applicable.
3. Otherwise, defaults to [Default](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.framework.essentials.loadconfigurations.entityloadconfiguration.html).

### SingleIdAsync(Query)

Gets a the id of the entity that matches the query.

#### Declaration

```csharp
public Task<long?> SingleIdAsync(Query query)
```

#### Parameters

| Type | Name | Description |
| --- | --- | --- |
| [Query](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.base.querying.query.html) | query | The query to execute. |

#### Returns

| Type | Description |
| --- | --- |
| Task<>long | The id of the entity that matches the query or null if there are no results. |

### Implements

[IQueryingClient](https://doc.sitecore.com/ch/en/developers/api-reference/sdk--stylelabs.m.sdk.clients.iqueryingclient.html)
