---
title: "xDBインデックス内のSearch連絡先と商取引のやり取り"
slug: "search-contacts-and-commerce-interactions-in-the-xdb-index"
abstract: "xDBインデックス内の商取引モデルやプロパティのクエリ方法。"
---
# xDBインデックス内のSearch連絡先と商取引のやり取り

xConnect Search APIを使えば、[連絡先や商取引のやり取りを検索し](https://doc.sitecore.com/xp/en/developers/100/sitecore-experience-platform/en/work-with-search.html) 、例えば注文した顧客のリストや顧客が購入した全商品のリストを作成できます。

> !注デフォルトでインデックスされていないすべてのモデルのブラックリストを見つけることができます。これらのモデルは*[DoNotIndexAttribute](https://doc.sitecore.com/xp/en/developers/100/sitecore-experience-platform/en/xconnect-service.html)*タイプを持っています。このリストは[カスタムモデルでデプロイ](https://doc.sitecore.com/xp/en/developers/100/sitecore-experience-platform/en/deploy-a-custom-model.html)されるSitecore.Commerce.Connect.XConnect.Models.jsonファイルに含まれています。

このトピックでは、xConnect Search APIを使ってCommerceのイベントに基づいて連絡先を照会する方法の例を提供します。

> !注Azureでは、以下の例にある入れ子されたループを単一のLINQ文にまとめることができます。

## 注文した顧客のリストを返却してください

以下のコード例は、注文を行った連絡先のリストを返します。

using (var client = new XConnectClient(cfg))
 {
 var query = client.Contacts.Where(c => c.Interactions
 .Any(i => i.Events.OfType<VisitorOrderCreatedGoal>()
 .Any(e => e.Order.CartLines.Any(l => l.Product.ProductName == "Habitat Sentinel Touchscreen Thermostat"))));

 var enumerator = await query.GetBatchEnumerator(20);
 List<IEntityReference<Contact>> contactsWhoPlacedOrders = new List<IEntityReference<Contact>>();

 while (await enumerator.MoveNext())
 {
 var contacts = enumerator.Current;
 contactsWhoPlacedOrders.AddRange(contacts);
 }
 }
## 顧客が購入したすべての商品のリストを返送してください

以下のコード例は、特定の顧客が購入した商品のリストを返します。

using (var client = new XConnectClient(cfg))
 {
 var contactId = Guid.Parse("1822ef81-3016-0000-0000-05a9dc69662e");
 var query = client.Interactions
 .Where(i => i.Contact.Id == contactId
 && i.Events.OfType<VisitorOrderCreatedGoal>().Any());
 var enumerator = await query.GetBatchEnumerator();

 while (await enumerator.MoveNext())
 {
 var interactions = enumerator.Current;
 var productList = interactions.Where(i => i.Events.OfType<VisitorOrderCreatedGoal>().Any())
 .SelectMany(i => i.Events.OfType<VisitorOrderCreatedGoal>())
 .SelectMany(e => e.Order.CartLines)
 .Select(cl=>cl.Product).ToList();
 }
 }
## 顧客が閲覧したすべての商品のリストを返送してください

以下のコード例は、個々の顧客が閲覧したすべての商品のリストを返します。

using (var client = new XConnectClient(cfg))
 {
 var query = client.Interactions
 .Where(i => i.Contact.Id == Guid.Parse("1822ef81-3016-0000-0000-05a9dc69662e")
 && i.Events.OfType<VisitedProductDetailsPageEvent>().Any());
 var enumerator = await query.GetBatchEnumerator();

 while (await enumerator.MoveNext())
 {
 var interactions = enumerator.Current;
 var visitedProductsListIds = interactions
 .SelectMany(i => i.Events.OfType<VisitedProductDetailsPageEvent>())
 .Select(e => e.ProductId).ToList();
 }
 }
## 顧客が訪れたすべてのカテゴリーのリストを返してください

以下のコード例は、顧客が訪れたすべてのカテゴリのリストを返します。

var cfg = GetXConnectClientConfiguration();

 using (var client = new XConnectClient(cfg))
 {
 var query = client.Interactions
 .Where(i => i.Contact.Id == Guid.Parse("1822ef81-3016-0000-0000-05a9dc69662e")
 && i.Events.OfType<VisitedCategoryPageEvent>().Any());
 var enumerator = await query.GetBatchEnumerator();

 while (await enumerator.MoveNext())
 {
 var interactions = enumerator.Current;
 var visitedCategoryListIds = interactions
 .SelectMany(i => i.Events.OfType<VisitedCategoryPageEvent>())
 .Select(e => e.CategoryId).ToList();
 }
 }
## カートを放棄した顧客のリストを返却してください

以下のコード例は、カートを放棄した顧客のリストを返します。

var cfg = GetXConnectClientConfiguration();

 using (var client = new XConnectClient(cfg))
 {
 var query = client.Contacts.Where(c => c.Interactions
 .Any(i => i.Events.OfType<AbandonedCartPageEvent>().Any()));
 var enumerator = await query.GetBatchEnumerator(20);
 List<IEntityReference<Contact>> contactsWithAbandonedCart = new List<IEntityReference<Contact>>();

 while (await enumerator.MoveNext())
 {
 var contacts = enumerator.Current;
 contactsWithAbandonedCart.AddRange(contacts);
 }
 }