---
title: "xConnect検索に対応している方法と演算子"
slug: "supported-methods-and-operators-for-xconnect-search"
abstract: "xConnect Client APIを使って連絡先ややり取りを検索する際のサポート方法とサポートされていない方法とオペレーターの概要。"
---
# xConnect検索に対応している方法と演算子

xConnect検索はIAsyncQueryable<T> すべての手法を実装しておらず、サポートされていないメソッドを使おうとするとSitecore.XConnect.Search.YourLinqIsTooStrongExceptionまたはXdbModelException例外を投げ出します。以下の表は、明示的に記載されていない限り、接触検索とインタラクション検索の両方に適用されます。

同期および非同期拡張メソッドの概要については [、xConnect Client API](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/xconnect-client-api-overview.html "xConnect Client API overview")を参照してください。

*拡張法と演算子サポート行列:*

方法/演算子

xConnect

IAsyncQueryable

注記

.Where()

はい

はい

.Any()

はい

はい

制限については [「Azure Searchリストのフィールド制限](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/supported-methods-and-operators-for-xconnect-search.html#UUID-fa7177ab-5272-687b-e3b3-dceb1c47d934_N1596796076166) 」セクションを参照してください。

.ToArray()

はい

はい

.ToList()

はい

はい

.Count()

はい

はい

.OrderBy()

はい

はい

.OrderByDescending()

はい

はい

.ThenBy()

はい

はい

.ThenByDescending()

はい

はい

.Skip()

はい

はい

ページ [ングのxConnect検索結果](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/paginatingxconnect-search-results.html)をご覧ください。

.Take()

はい

はい

ページ [ングのxConnect検索結果](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/paginatingxconnect-search-results.html)をご覧ください。

.FirstOrDefault()

はい

はい

.First()

はい

はい

.Single()

はい

はい

.SingleOrDefault()

はい

はい

\== および !=

はい

はい

< および \>

はい

はい

<= および \>=

はい

はい

&& および ||

はい

はい

.GetBatchEnumerator()

はい

いいえ

.GetBatchEnumeratorSync()

はい

いいえ

.ToSearchResults()

はい

いいえ

.WithExpandOptions()

はい

いいえ

.AsEnumerable()

はい

いいえ

同期のみ。

Contains

いいえ

はい

StartsWith

いいえ

はい

EndsWith

いいえ

はい

ToString

いいえ

はい

Equals

いいえ

はい

> !注Like() 拡張方法は存在しません。

## xConnect検索プロバイダーの制限

xConnect検索プロバイダーは以下のシナリオをサポートしていません:

*xConnect検索プロバイダーの制限:*

-   シナリオ:制限
-   検索式内のカスタムメソッド:xConnect Client APIはLINQクエリ式内でカスタムメソッド呼び出しをサポートしていません。例外は Sitecore.XConnect.Search.YourLinqIsTooStrongException または XdbModelException 例外として表示されます。
-   Search for null 値:ファセットがnullかどうかを確認できません。例えば:

var notWebVisits = client.Interactions.Where(c => c.WebVisit() == null);

-   カスタムイベントプロパティでTimespanによるSearch:以下のクエリ(カスタムTimespanプロパティを使用)はサポートされていません:注:イベントにはデフォルトのDurationプロパティを引き続き使用できます。この制限はイベントにのみ適用され、ファセットには適用されません。

var interactions = await \_client.Contacts.Where(c => c.Interactions.Any(i => i.Events.OfType<CampaignEvent>().Any(e => e.CustomCampaignTimespan == TimeSpan.Zero)));

-   まず、LINQ式内のFirstorDefault、Last、LastOrDefault、またはカウントを行ってください:サポートされていません:

// 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:OfType演算子とTimespanプロパティ(例:Hours、Minutes、Secondsなど)を組み合わせたクエリでTimespanを使うことはできません。サポート済み:サポートなし:

events.OfType<SomeEventType>(e => e.SomeTypeTimeSpanField > TimeSpan.FromHours(2))

events.OfType<SomeEventType>(e => e.SomeTypeTimeSpanField.Hours > 10)

-   複雑なリストへのパスにおける重複名:以下のクエリはサポートされていません。なぜなら、Path.To.Nestedは両リストで同じだからです:

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

## Azure Searchプロバイダーの制限

以下の制限は、xConnect検索のプロバイダー Azure Search特有のものです。

*Azure Search提供者の限界:*

-   シナリオ:制限
-   contact.Interactions.Any(): Azure Searchプロバイダーは結合をサポートしていません。詳細については、「検索と[連絡先のSearch](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/search-contacts.html)[の使い方](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-platform/work-with-search.html)(結合の有無の例を含む)」をご覧ください。重要 このAzure Search制限は使用できるセグメンテーションルールに影響します。例えば、メールイベント(メールを開く、リンクをクリックするなど)で連絡先を絞り込むことはできません。
-   部分テキスト検索:Azure Searchプロバイダーでサポートされていません。例えば:

client.Contacts.Where(c => c.TextMatch("Mar"))

## Azure Search分野の制限一覧

以下の表は、Azure Searchにおける [複素型の制限](https://feedback.azure.com/forums/263029-azure-search/suggestions/6670910-modelling-complex-types-in-indexes) に関するものです。

### 9.0アップデート2

9.0アップデート2では、複雑な型のリスト内の比較の改善が導入されました。以下はこれらの型に対する演算子のサポートを示しています:

*Azure Search 9.0 アップデート2のフィールドサポートマトリックスリスト:*

種類

\==

||

&&

!

\>

\>=

<

<=

!=

文字列、列挙、またはGuidのネストリスト

はい

はい

はい

はい

**いいえ**

**いいえ**

**いいえ**

**いいえ**

**いいえ**

複雑な型やintfloat

はい

はい

はい

はい

はい

はい

はい

はい

はい

以下はこれらのタイプにおける演算子の使用例を示します。

*Azure Search 9.0アップデート2のフィールド例一覧:*

-   種類:例
-   文字列、列挙、Guidのネストリスト:サポートなし:サポート済み:

c=>c.SomeFacet().SomeList.Any(e=>e!="hello")
c=>c.SomeFacet().SomeList.Any(e=>e!="hello"||e!="world")

c=>c.SomeFacet().SomeList.Any(e=>e=="hello")
c=>c.SomeFacet().SomeList.Any(e=>e=="hello"||e=="world")

-   複雑な型や int や floatのような単純な型のネストリスト:サポート:

c=>c.SomeFacet().SomeList.Any(e=>e.Property1>2)
c=>c.SomeFacet().SomeList.Any(e=>e.Property1!=2)
c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2&&e.Property2=="string")
c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2||e.Property2=="string")

-   別のリストを含むリスト:入れ子リストにアクセスするために入れ子リストのAny()を使用できます。サポート対象:

someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))

-   Any()述語内の文字列、エナグ、またはGuidのネストリスト:Any()述語内で == と || を使用可能です。サポート:

c=>c.SomeFacet().SomeList.Any(e=>e=="hello")
c=>c.SomeFacet().SomeList.Any(e=>e=="hello"||e=="world")

-   OfType<T>コールの後に続くAny():これは正確な型または基底クラスのフィールドを指します。サポート:

i=>i.Events.OfType<Outcome>().Any(o=>o.MonetaryValue>10)
i=>i.Events.OfType<Outcome>().Any(o=>o.DefinitionId==someId)

### 9.0初期リリースと9.0アップデート1

以下はこれらのタイプのオペレーターサポートを示しています:

*Azure Search 9.0初期リリースおよび9.0アップデート1のフィールドサポートを一覧にします。*

種類

\==

||

&&

!

\>

\>=

<

<=

!=

Any()述語内のネストリスト

はい

**いいえ**

**いいえ**

**いいえ**

**いいえ**

**いいえ**

**いいえ**

**いいえ**

**いいえ**

以下はこれらのタイプにおける演算子の使用例を示します。

*Azure Search 9.0初期リリースおよび9.0アップデート1のフィールド例を示します。*

-   種類:例
-   別のリストを含むリスト:入れ子リストにアクセスするために入れ子リストのAny()を使用できます。サポート対象:

someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))

-   Any()述語内のネストリスト:サポートなし:サポート済み:

c=>c.SomeFacet().SomeList.Any(e=>e.Property1>2)
c=>c.SomeFacet().SomeList.Any(e=>e.Property1!=2)
c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2&&e.Property2=="string")
c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2||e.Property2=="string")

MyListProperty.Any(v=>v.SomeField==2)
c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2)||
c=>c.SomeFacet().SomeList.Any(e=>e.Property2=="string")

-   OfType<T>コールの後に続くAny():指定された正確な型のフィールドのみを参照でき、基本クラスを参照することはできません。サポートされていません:注MonetaryValueはOutcomeのプロパティですが、Any()は>と組み合わせて使うことはできません。NoteDefinitionIdはOutcomeのプロパティではなく、ベースクラスのプロパティです。

i=>i.Events.OfType<Outcome>().Any(o=>o.MonetaryValue>10)

i=>i.Events.OfType<Outcome>().Any(o=>o.DefinitionId==someId)