---
title: "Supported methods and operators for xConnect search"
slug: "supported-methods-and-operators-for-xconnect-search"
abstract: "An overview of supported and unsupported methods and operators when using the xConnect Client API to search contacts and interactions."
---
# Supported methods and operators for xConnect search

xConnect search does not implement all of `IAsyncQueryable<T>` methods and throws a `Sitecore.XConnect.Search.YourLinqIsTooStrongException` or an `XdbModelException` exception if you try to use a method that is not supported. The following table applies to both contact and interaction searches unless explicitly stated.

Refer to the [xConnect Client API](https://doc.sitecore.com/xp/en/developers/105/sitecore-experience-platform/xconnect-client-api-overview.html "xConnect Client API overview") for an overview of synchronous and asynchronous extension methods.

*Extension method and operator support matrix:*

| Method/Operator | xConnect | IAsyncQueryable<T> | Notes |
| --- | --- | --- | --- |
| `.Where()` | Yes | Yes |  |
| `.Any()` | Yes | Yes | |
| `.ToArray()` | Yes | Yes |  |
| `.ToList()` | Yes | Yes |  |
| `.Count()` | Yes | Yes |  |
| `.OrderBy()` | Yes | Yes |  |
| `.OrderByDescending()` | Yes | Yes |  |
| `.ThenBy()` | Yes | Yes |  |
| `.ThenByDescending()` | Yes | Yes |  |
| `.Skip()` | Yes | Yes | See [Paginating xConnect search results](https://doc.sitecore.com/xp/en/developers/105/sitecore-experience-platform/paginatingxconnect-search-results.html). |
| `.Take()` | Yes | Yes | See [Paginating xConnect search results](https://doc.sitecore.com/xp/en/developers/105/sitecore-experience-platform/paginatingxconnect-search-results.html). |
| `.FirstOrDefault()` | Yes | Yes |  |
| `.First()` | Yes | Yes |  |
| `.Single()` | Yes | Yes |  |
| `.SingleOrDefault()` | Yes | Yes |  |
| `==` and `!=` | Yes | Yes |  |
| `<` and `>` | Yes | Yes |  |
| `<=` and `>=` | Yes | Yes |  |
| `&&` and `\|\|` | Yes | Yes |  |
| `.GetBatchEnumerator()` | Yes | No |  |
| `.GetBatchEnumeratorSync()` | Yes | No |  |
| `.ToSearchResults()` | Yes | No |  |
| `.WithExpandOptions()` | Yes | No |  |
| `.AsEnumerable()` | Yes | No | Synchronous only. |
| `Contains` | No | Yes |  |
| `StartsWith` | No | Yes |  |
| `EndsWith` | No | Yes |  |
| `ToString` | No | Yes |  |
| `Equals` | No | Yes |  |

> [!note]
> There is no `Like()` extension method.

## xConnect search provider limitations

xConnect search providers do not support the following scenarios:

*Limitations of xConnect search providers:*

- Scenario: Limitation
- Custom methods inside search expressions: The xConnect Client API does not support custom method calls inside LINQ query expressions. You receive a `Sitecore.XConnect.Search.YourLinqIsTooStrongException` or an `XdbModelException` exception.
- Search for null values: It is not possible to check if a facet is null. For example:

```csharp
var notWebVisits = client.Interactions.Where(c => c.WebVisit() == null);
```
- Search by Timespan in custom event properties: The following query (using a custom Timespan property) is unsupported:NoteYou can still use the default Duration property on events. This restriction only applies to events, not facets.

```csharp
var interactions = await _client.Contacts.Where(c => c.Interactions.Any(i => i.Events.OfType<CampaignEvent>().Any(e => e.CustomCampaignTimespan == TimeSpan.Zero)));
```
- First, FirstOrDefault, Last, LastOrDefault, or Count inside a LINQ expression: Not supported:

```csharp
// First() inside a LINQ expression is unsupported:
var interactions = await _client.Interactions.Where(i => i.Events.First().EngagementValue == 11).ToList();

// FirstOrDefault() inside a LINQ expression is unsupported:
var contacts = await _client.Contacts.Where(contact => contact.Interactions.OrderByDescending(x => x.StartDateTime).FirstOrDefault().WebVisit().SiteName == "value");

// Last() inside a LINQ expression is unsupported:
var contacts = await _client.Contacts.Where(contact => contact.Interactions.Last().WebVisit().SiteName == value);
```
- Timespan: You cannot use Timespan with a query that combines the OfType operator AND a Timespan property (for example, Hours, Minutes, Seconds, and so on).Supported:Not supported:

```text
events.OfType<SomeEventType>(e => e.SomeTypeTimeSpanField > TimeSpan.FromHours(2))
```
```text
events.OfType<SomeEventType>(e => e.SomeTypeTimeSpanField.Hours > 10)
```
- Repeated names in paths to complex lists: The following queries are unsupported because Path.To.Nested is the same for both lists:

```text
i.Scores().Scores.Any(s=>s.Path.To.Nested.Any())
i.ProfileScores().ProfileScores.Any(s=>s.Path.To.Nested.Any())
```
