<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Jake Minard</title> <link>https://world.optimizely.com/blogs/jake-minard/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Introducing the Optimizely CMS 13 Graph SDK</title>            <link>https://world.optimizely.com/blogs/jake-minard/dates/2026/3/introducing-optimizely-cms-13-graph-sdk/</link>            <description>&lt;p style=&quot;font-size: 1.2rem; color: #555; margin-bottom: 8px; font-weight: 400;&quot;&gt;Query Optimizely Graph Without Writing GraphQL. A C# fluent API that lets you migrate from Search &amp;amp; Navigation with familiar patterns.&lt;/p&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 32px;&quot;&gt;&lt;span style=&quot;background: #f0f4ff; color: #0037ff; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 12px; display: inline-block;&quot;&gt;CMS 13&lt;/span&gt; &lt;span style=&quot;background: #f0f4ff; color: #0037ff; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 12px; display: inline-block;&quot;&gt;Optimizely Graph&lt;/span&gt; &lt;span style=&quot;background: #f0f4ff; color: #0037ff; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 12px; display: inline-block;&quot;&gt;Migration&lt;/span&gt; &lt;span style=&quot;background: #f0f4ff; color: #0037ff; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 12px; display: inline-block;&quot;&gt;SDK&lt;/span&gt; &lt;span style=&quot;background: #f0f4ff; color: #0037ff; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 12px; display: inline-block;&quot;&gt;Search &amp;amp; Navigation&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background: linear-gradient(135deg,#f0f4ff 0%,#e8f0fe 100%); border: 1px solid #93c5fd; border-left: 4px solid #2563eb; border-radius: 8px; padding: 10px 28px; margin: 0 0 40px;&quot;&gt;
&lt;h3 style=&quot;margin-top: 0;&quot;&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search &amp;amp; Navigation is gone in CMS 13.&lt;/strong&gt; Optimizely Graph is the replacement, and the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Optimizely.Graph.Cms.Query&lt;/span&gt;&lt;/strong&gt; SDK lets you query it with familiar C# fluent patterns instead of raw GraphQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The API mirrors what you know:&lt;/strong&gt; &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Filter()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SearchFor()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;For()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Limit()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Take()&lt;/span&gt;&lt;/strong&gt;. Your muscle memory transfers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Three entry points:&lt;/strong&gt; &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;QueryContent&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; for CMS content, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; for any type, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query(&quot;TypeName&quot;)&lt;/span&gt;&lt;/strong&gt; for dynamic scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New capabilities included:&lt;/strong&gt; Boolean facets, IAsyncEnumerable streaming, decay/factor scoring, pinned results, named queries, and cursor-based pagination.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt; is your best friend.&lt;/strong&gt; Call it on any query to inspect the generated GraphQL. This will be invaluable during migration.&lt;/li&gt;
&lt;li&gt;A complete migration reference table (Section 12) maps every Search &amp;amp; Navigation API to its Graph SDK equivalent.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;1. Why This SDK Exists&lt;/h2&gt;
&lt;p&gt;With CMS 13, Optimizely is replacing Search &amp;amp; Navigation (formerly Episerver Find) with &lt;strong&gt;Optimizely Graph&lt;/strong&gt; as the platform&#39;s content query engine. This is not an optional migration, Search &amp;amp; Navigation will not be available in CMS 13.&lt;/p&gt;
&lt;p&gt;For many partner developers, this triggers understandable anxiety. Search &amp;amp; Navigation&#39;s fluent API has been the go-to for content querying for years. Teams have accumulated deep expertise in its fluent &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Search&amp;lt;T&amp;gt;().For().Filter()&lt;/span&gt;&lt;/strong&gt; patterns, and the prospect of learning GraphQL from scratch feels like a significant lift on top of everything else in a CMS 13 migration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That&#39;s exactly why the Graph SDK exists.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Optimizely.Graph.Cms.Query&lt;/span&gt;&lt;/strong&gt; package provides a C# fluent API that compiles your familiar expressions into GraphQL queries behind the scenes. You write C#. The SDK writes GraphQL. Optimizely Graph executes it.&lt;/p&gt;
&lt;div style=&quot;border-left: 4px solid #2563eb; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dbeafe;&quot;&gt;&lt;strong&gt;You do not need to learn GraphQL to use Optimizely Graph.&lt;/strong&gt;
&lt;p&gt;The SDK translates your C# lambda expressions into optimized GraphQL queries automatically. If you&#39;ve used Search &amp;amp; Navigation, you already know 90% of what you need.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The API intentionally mirrors Search &amp;amp; Navigation patterns where possible: &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Filter()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SearchFor()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;For()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Limit()&lt;/span&gt;&lt;/strong&gt; replaces &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Take()&lt;/span&gt;&lt;/strong&gt;. The muscle memory transfers.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;2. Getting Started&lt;/h2&gt;
&lt;h3&gt;DI Registration&lt;/h3&gt;
&lt;p&gt;Register the Graph content client in your &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Startup.cs&lt;/span&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Program.cs&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Program.cs or Startup.cs&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #004d40;&quot;&gt;services&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;AddGraphContentClient&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Inject the Client&lt;/h3&gt;
&lt;p&gt;Inject &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IGraphContentClient&lt;/span&gt;&lt;/strong&gt; into your controllers, services, or view components:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;public class&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;SearchController&lt;/span&gt; : &lt;span style=&quot;color: #004d40;&quot;&gt;Controller&lt;/span&gt;
{
    &lt;span style=&quot;color: #000080;&quot;&gt;private readonly&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;IGraphContentClient&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;;

    &lt;span style=&quot;color: #000080;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;SearchController&lt;/span&gt;(&lt;span style=&quot;color: #004d40;&quot;&gt;IGraphContentClient&lt;/span&gt; graphClient)
    {
        &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt; = graphClient;
    }
}&lt;/pre&gt;
&lt;h3&gt;Three Entry Points&lt;/h3&gt;
&lt;p&gt;The SDK provides three ways to start a query, depending on your needs:&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.9rem;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Method&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Use Case&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Type Constraint&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;QueryContent&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Strongly-typed CMS content queries&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;T : class, IContentData&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ISearchableContentQuery&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Strongly-typed queries for any class&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;T : class&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ISearchableQuery&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query(&quot;TypeName&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Untyped queries by content type name&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;None&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ISearchableQuery&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;QueryContent&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; is the most common choice for CMS content. It constrains &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;T&lt;/span&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentData&lt;/span&gt;&lt;/strong&gt;, giving you access to CMS-specific features like content resolution via &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsContentAsync()&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; works with any class, not just CMS content types. Use this when querying custom types indexed in Graph that don&#39;t implement &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentData&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query(&quot;TypeName&quot;)&lt;/span&gt;&lt;/strong&gt; creates an untyped query using a string type name. Useful for dynamic scenarios where the content type isn&#39;t known at compile time.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;3. Your First Query&lt;/h2&gt;
&lt;p&gt;Let&#39;s see the same query expressed three ways. &lt;strong&gt;Goal:&lt;/strong&gt; Find all recipes in the &quot;Dessert&quot; category, returning only Name and Description.&lt;/p&gt;
&lt;div style=&quot;margin: 16px 0;&quot;&gt;
&lt;div style=&quot;font-size: 0.75rem; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; padding: 6px 14px; border-radius: 8px 8px 0 0; color: #fff; background: #ef4444;&quot;&gt;Before - Search &amp;amp; Navigation&lt;/div&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 0 0 8px 8px; padding: 16px 20px; overflow-x: auto; margin: 0 0 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = searchClient.&lt;span style=&quot;color: #0000cc;&quot;&gt;Search&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Filter&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Select&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; { x.Name, x.Description })
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetResult&lt;/span&gt;();&lt;/pre&gt;
&lt;div style=&quot;font-size: 0.75rem; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; padding: 6px 14px; border-radius: 8px 8px 0 0; color: #fff; background: #16a34a;&quot;&gt;After - Graph SDK&lt;/div&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 0 0 8px 8px; padding: 16px 20px; overflow-x: auto; margin: 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;(&lt;span style=&quot;color: #000080;&quot;&gt;nameof&lt;/span&gt;(&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;.Name), &lt;span style=&quot;color: #000080;&quot;&gt;nameof&lt;/span&gt;(&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;.Description))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The parallels are clear: &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Filter()&lt;/span&gt;&lt;/strong&gt; becomes &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Select()&lt;/span&gt;&lt;/strong&gt; becomes &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Fields&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetResult()&lt;/span&gt;&lt;/strong&gt; becomes &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsync()&lt;/span&gt;&lt;/strong&gt;. The Graph SDK is async-first, returning &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Task&amp;lt;IContentResult&amp;lt;T&amp;gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;GetAsContentAsync() - CMS Content Resolution&lt;/h3&gt;
&lt;p&gt;When querying CMS content types, use &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsContentAsync()&lt;/span&gt;&lt;/strong&gt; to resolve results directly as &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContent&lt;/span&gt;&lt;/strong&gt; items. This returns the same fully-resolved content objects that Search &amp;amp; Navigation&#39;s &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetResult()&lt;/span&gt;&lt;/strong&gt; provided.&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsContentAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// result implements IEnumerable&amp;lt;IContent&amp;gt;&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; content &lt;span style=&quot;color: #000080;&quot;&gt;in&lt;/span&gt; result)
{
    &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// content is IContent, fully resolved from CMS&lt;/em&gt;&lt;/span&gt;
}&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #f59e0b; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #fef3c7;&quot;&gt;&lt;strong&gt;Do not use .Fields() with GetAsContentAsync()&lt;/strong&gt;
&lt;p&gt;The SDK generates a minimal query fetching only content identifiers (&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;_id&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;_metadata&lt;/span&gt;&lt;/strong&gt;), then resolves full &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContent&lt;/span&gt;&lt;/strong&gt; objects through the CMS content loader. Calling &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Fields()&lt;/span&gt;&lt;/strong&gt; with an &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentData&lt;/span&gt;&lt;/strong&gt; projection type will throw &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;InvalidOperationException&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Generated GraphQL&lt;/h3&gt;
&lt;p&gt;For the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsync()&lt;/span&gt;&lt;/strong&gt; query above (with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Fields&lt;/span&gt;&lt;/strong&gt;), the SDK generates:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;{
  &lt;span style=&quot;color: #0000cc;&quot;&gt;Recipe&lt;/span&gt;(&lt;span style=&quot;color: #660033;&quot;&gt;where&lt;/span&gt;: { &lt;span style=&quot;color: #0000cc;&quot;&gt;category&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;eq&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt; } }) {
    &lt;span style=&quot;color: #0000cc;&quot;&gt;items&lt;/span&gt; {
      &lt;span style=&quot;color: #0000cc;&quot;&gt;Name&lt;/span&gt;
      &lt;span style=&quot;color: #0000cc;&quot;&gt;Description&lt;/span&gt;
    }
  }
}&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #16a34a; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dcfce7;&quot;&gt;&lt;strong&gt;Tip: Use &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;Call &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt; on any query to see the generated GraphQL without executing it. This is invaluable for debugging and learning how your C# maps to GraphQL.&lt;/p&gt;
&lt;/div&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt; graphql = &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;ToGraphQL&lt;/span&gt;();

&lt;span style=&quot;color: #004d40;&quot;&gt;Console&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;WriteLine&lt;/span&gt;(graphql);&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsync()&lt;/span&gt;&lt;/strong&gt; returns raw Graph results as &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentResult&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;. Use with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Fields&amp;lt;TProjection&amp;gt;()&lt;/span&gt;&lt;/strong&gt; to specify which fields to return.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsContentAsync()&lt;/span&gt;&lt;/strong&gt; resolves results through the CMS content loader, returning &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IGetAsContentResult&amp;lt;IContent&amp;gt;&lt;/span&gt;&lt;/strong&gt;. Do not use &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Fields()&lt;/span&gt;&lt;/strong&gt; with this method.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsContentAsync()&lt;/span&gt;&lt;/strong&gt; is only available on &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;QueryContent&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; queries.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;4. Filtering&lt;/h2&gt;
&lt;p&gt;Filtering is where you&#39;ll spend most of your time. The SDK provides multiple approaches, from simple lambda expressions to a dynamic &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;FilterBuilder&lt;/span&gt;&lt;/strong&gt; API.&lt;/p&gt;
&lt;h3&gt;Lambda Expressions&lt;/h3&gt;
&lt;p&gt;The most natural way to filter, standard C# comparison operators inside a&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where()&lt;/span&gt;&lt;/strong&gt; lambda:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Equality&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Not equal&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Archived&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Numeric comparisons&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Rating &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;4&lt;/span&gt;)
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.CookingTime &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;30&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Boolean&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.IsPublished)
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; !x.IsArchived)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Compound conditions with &amp;amp;&amp;amp; and ||&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt; &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.Rating &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;4&lt;/span&gt; &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.IsPublished)
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Appetizer&quot;&lt;/span&gt; &lt;span style=&quot;color: #6b3a00;&quot;&gt;||&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Full example with compound conditions:&lt;/strong&gt;&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Cookies&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt; &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.Rating &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;4&lt;/span&gt; &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.IsPublished)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Name, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Description)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Generated GraphQL:&lt;/strong&gt;&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;{
  &lt;span style=&quot;color: #0000cc;&quot;&gt;Recipe&lt;/span&gt;(
    &lt;span style=&quot;color: #660033;&quot;&gt;where&lt;/span&gt;: {
      &lt;span style=&quot;color: #0000cc;&quot;&gt;_and&lt;/span&gt;: [
        { &lt;span style=&quot;color: #0000cc;&quot;&gt;category&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;eq&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt; } }
        { &lt;span style=&quot;color: #0000cc;&quot;&gt;rating&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;gt&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;4&lt;/span&gt; } }
        { &lt;span style=&quot;color: #0000cc;&quot;&gt;isPublished&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;eq&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;true&lt;/span&gt; } }
      ]
      &lt;span style=&quot;color: #0000cc;&quot;&gt;_fulltext&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;match&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Cookies&quot;&lt;/span&gt; }
    }
  ) {
    &lt;span style=&quot;color: #0000cc;&quot;&gt;items&lt;/span&gt; { &lt;span style=&quot;color: #0000cc;&quot;&gt;Name&lt;/span&gt;  &lt;span style=&quot;color: #0000cc;&quot;&gt;Description&lt;/span&gt; }
  }
}&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #2563eb; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dbeafe;&quot;&gt;&lt;strong&gt;Multiple .Where() calls&lt;/strong&gt;
&lt;p&gt;You can chain multiple &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where()&lt;/span&gt;&lt;/strong&gt; calls on the same query. Each call adds an AND condition.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;String Filters&lt;/h3&gt;
&lt;p&gt;Extension methods for string operations that go beyond what lambda expressions can express:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Exact match&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Like -- SQL-style wildcards (% = 0+ chars, _ = single char)&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title.&lt;span style=&quot;color: #0000cc;&quot;&gt;Like&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;%chocolate%&quot;&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Contains -- substring search&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title.&lt;span style=&quot;color: #0000cc;&quot;&gt;Contains&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate&quot;&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// StartsWith&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title.&lt;span style=&quot;color: #0000cc;&quot;&gt;StartsWith&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;How to&quot;&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// In -- matches any value in a collection&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;In&lt;/span&gt;(&lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Appetizer&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Main Course&quot;&lt;/span&gt; }))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Exists -- check if field has/lacks a value&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author.&lt;span style=&quot;color: #0000cc;&quot;&gt;Exists&lt;/span&gt;())       &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// has a value&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author.&lt;span style=&quot;color: #0000cc;&quot;&gt;Exists&lt;/span&gt;(&lt;span style=&quot;color: #000080;&quot;&gt;false&lt;/span&gt;))  &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// is null&lt;/em&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;Collection and Range Filters&lt;/h3&gt;
&lt;p&gt;Numeric and DateTime properties support range-based filtering:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Numeric range (inclusive)&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.CookingTime.&lt;span style=&quot;color: #0000cc;&quot;&gt;InRange&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;15&lt;/span&gt;, &lt;span style=&quot;color: #800000;&quot;&gt;45&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Greater than / Less than&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Rating.&lt;span style=&quot;color: #0000cc;&quot;&gt;GreaterThan&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;3&lt;/span&gt;))
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.CookingTime.&lt;span style=&quot;color: #0000cc;&quot;&gt;LessThanOrEqual&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;60&lt;/span&gt;))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// DateTime range&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate.&lt;span style=&quot;color: #0000cc;&quot;&gt;InRange&lt;/span&gt;(startDate, endDate))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// DateTime comparisons&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate.&lt;span style=&quot;color: #0000cc;&quot;&gt;GreaterThan&lt;/span&gt;(&lt;span style=&quot;color: #004d40;&quot;&gt;DateTime&lt;/span&gt;.UtcNow.&lt;span style=&quot;color: #0000cc;&quot;&gt;AddDays&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;-30&lt;/span&gt;)))&lt;/pre&gt;
&lt;h3&gt;Dynamic FilterBuilder API&lt;/h3&gt;
&lt;p&gt;For scenarios where filters must be built at runtime. Based on user input, iterating over collections, or applying conditional logic:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; filter = &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;BuildFilter&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;();

&lt;span style=&quot;color: #000080;&quot;&gt;if&lt;/span&gt; (!&lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;IsNullOrEmpty&lt;/span&gt;(selectedCategory))
{
    filter = filter.&lt;span style=&quot;color: #0000cc;&quot;&gt;And&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(selectedCategory));
}

&lt;span style=&quot;color: #000080;&quot;&gt;if&lt;/span&gt; (minRating.HasValue)
{
    filter = filter.&lt;span style=&quot;color: #0000cc;&quot;&gt;And&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Rating.&lt;span style=&quot;color: #0000cc;&quot;&gt;GreaterThanOrEqual&lt;/span&gt;(minRating.Value));
}

&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Filter&lt;/span&gt;(filter)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Name, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Description)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Combining with OR logic:&lt;/strong&gt;&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; filter = &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;BuildFilter&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Or&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Or&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Appetizer&quot;&lt;/span&gt;))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Or&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Snack&quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #2563eb; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dbeafe;&quot;&gt;&lt;strong&gt;Key FilterBuilder Details&lt;/strong&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;BuildFilter&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt; is an extension method on &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IGraphContentClient&lt;/span&gt;&lt;/strong&gt;. Each &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.And()&lt;/span&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Or()&lt;/span&gt;&lt;/strong&gt; call returns a &lt;strong&gt;new&lt;/strong&gt; &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;FilterBuilder&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt; instance (immutable). &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;FilterBuilder&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt; has an implicit conversion to &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GraphFilter&lt;/span&gt;&lt;/strong&gt;, so it can also be passed to &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(GraphFilter)&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Combining Where() and Filter()&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; dynamicFilter = &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;BuildFilter&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;And&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.IsPublished.&lt;span style=&quot;color: #0000cc;&quot;&gt;Match&lt;/span&gt;(&lt;span style=&quot;color: #000080;&quot;&gt;true&lt;/span&gt;))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;And&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Rating.&lt;span style=&quot;color: #0000cc;&quot;&gt;GreaterThan&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;3&lt;/span&gt;));

&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)  &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Lambda expression&lt;/em&gt;&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Filter&lt;/span&gt;(dynamicFilter)                  &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// FilterBuilder&lt;/em&gt;&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Name, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Description)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #f59e0b; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #fef3c7;&quot;&gt;&lt;strong&gt;Where() vs Filter()&lt;/strong&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where()&lt;/span&gt;&lt;/strong&gt; adds filter conditions directly. &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Filter()&lt;/span&gt;&lt;/strong&gt; accepts a &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;FilterBuilder&amp;lt;T&amp;gt;?&lt;/span&gt;&lt;/strong&gt; specifically, which is designed for the dynamic filter-building pattern. Both can be combined in the same query.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;font-size: 0.88rem; color: #666; font-style: italic; margin-top: 16px;&quot;&gt;See the complete migration reference (Section 12) for S&amp;amp;N filter equivalents.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;5. Full-Text Search&lt;/h2&gt;
&lt;p&gt;Full-text search follows a chain pattern: &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SearchFor()&lt;/span&gt;&lt;/strong&gt; opens the search context, then &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;UsingFullText()&lt;/span&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;UsingField()&lt;/span&gt;&lt;/strong&gt; configure how the search is applied.&lt;/p&gt;
&lt;h3&gt;Basic Full-Text Search&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate cake recipe&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SearchFor()&lt;/span&gt;&lt;/strong&gt; returns &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ISearchFieldContentQuery&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;, which adds three search-specific methods: &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;UsingFullText()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;UsingField()&lt;/span&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Track()&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;UsingFullText&lt;/h3&gt;
&lt;p&gt;Apply the search term across all searchable fields with optional highlighting and boost:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate cake&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingFullText&lt;/span&gt;(highlightTag: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&amp;lt;mark&amp;gt;&quot;&lt;/span&gt;, boost: &lt;span style=&quot;color: #800000;&quot;&gt;2&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;UsingField - Targeted Search with Boost&lt;/h3&gt;
&lt;p&gt;Target the search to specific fields with per-field boost values:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate cake&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingField&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, boost: &lt;span style=&quot;color: #800000;&quot;&gt;3&lt;/span&gt;, highlightTag: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&amp;lt;strong&amp;gt;&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingField&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary, boost: &lt;span style=&quot;color: #800000;&quot;&gt;2&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingField&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Body, boost: &lt;span style=&quot;color: #800000;&quot;&gt;1&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.88rem; color: #666; font-style: italic; margin-top: 16px;&quot;&gt;See the complete migration reference (Section 12) for S&amp;amp;N search equivalents.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;6. Faceted Search&lt;/h2&gt;
&lt;p&gt;Facets aggregate your results into buckets (categories, date ranges, numeric ranges, or boolean groups). The SDK provides separate &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Facet()&lt;/span&gt;&lt;/strong&gt; overloads for each data type.&lt;/p&gt;
&lt;h3&gt;String Facets&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// With ordering and limits&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category,
       limit: &lt;span style=&quot;color: #800000;&quot;&gt;10&lt;/span&gt;,
       orderType: &lt;span style=&quot;color: #004d40;&quot;&gt;OrderType&lt;/span&gt;.COUNT,
       direction: &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)&lt;/pre&gt;
&lt;h3&gt;Range Facets (int)&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.CookingTime, ranges: &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt;[]
    {
        &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;RangeFacetInput&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;int&lt;/span&gt;&amp;gt; { From = &lt;span style=&quot;color: #800000;&quot;&gt;0&lt;/span&gt;, To = &lt;span style=&quot;color: #800000;&quot;&gt;15&lt;/span&gt; },
        &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;RangeFacetInput&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;int&lt;/span&gt;&amp;gt; { From = &lt;span style=&quot;color: #800000;&quot;&gt;15&lt;/span&gt;, To = &lt;span style=&quot;color: #800000;&quot;&gt;30&lt;/span&gt; },
        &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;RangeFacetInput&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;int&lt;/span&gt;&amp;gt; { From = &lt;span style=&quot;color: #800000;&quot;&gt;30&lt;/span&gt;, To = &lt;span style=&quot;color: #800000;&quot;&gt;60&lt;/span&gt; },
        &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;RangeFacetInput&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;int&lt;/span&gt;&amp;gt; { From = &lt;span style=&quot;color: #800000;&quot;&gt;60&lt;/span&gt;, To = &lt;span style=&quot;color: #800000;&quot;&gt;120&lt;/span&gt; }
    })
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Name, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.CookingTime)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Boolean Facets &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Boolean facets are &lt;strong&gt;new in the Graph SDK&lt;/strong&gt; (Search &amp;amp; Navigation did not support them):&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.IsFeatured)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.IsFeatured)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Facet Filtering: OR Within, AND Between&lt;/h3&gt;
&lt;p&gt;The Graph SDK applies facet filters with intuitive boolean logic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Within a single facet:&lt;/strong&gt; values are combined with &lt;strong&gt;OR&lt;/strong&gt;. Selecting &quot;Dessert&quot; and &quot;Appetizer&quot; in Category returns items in Dessert &lt;em&gt;or&lt;/em&gt; Appetizer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Between different facets:&lt;/strong&gt; filters are combined with &lt;strong&gt;AND&lt;/strong&gt;. Selecting &quot;Dessert&quot; in Category &lt;em&gt;and&lt;/em&gt; &quot;Jane Doe&quot; in Author returns items matching both.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category, filters: &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Appetizer&quot;&lt;/span&gt; })  &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// OR&lt;/em&gt;&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author, filters: &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt; })              &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// AND with above&lt;/em&gt;&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsContentAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Returns: (Category is Dessert OR Appetizer) AND (Author is Jane Doe)&lt;/em&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #16a34a; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dcfce7;&quot;&gt;&lt;strong&gt;Improvement over S&amp;amp;N&lt;/strong&gt;
&lt;p&gt;In Search &amp;amp; Navigation, achieving OR-within / AND-between facets required executing multiple search queries and merging results. With the Graph SDK, a single query handles it natively.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Reading Facet Results&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Facet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Read facet values (type-safe)&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; authorFacets = result.Facets.&lt;span style=&quot;color: #0000cc;&quot;&gt;GetFacet&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author);

&lt;span style=&quot;color: #000080;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; facet &lt;span style=&quot;color: #000080;&quot;&gt;in&lt;/span&gt; authorFacets)
{
    &lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt; name = facet.Name;   &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// e.g., &quot;Jane Doe&quot;&lt;/em&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #000080;&quot;&gt;int&lt;/span&gt; count = facet.Count;    &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// e.g., 15&lt;/em&gt;&lt;/span&gt;
}

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Other helpers&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;bool&lt;/span&gt; hasFacet = result.Facets.&lt;span style=&quot;color: #0000cc;&quot;&gt;HasFacet&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Author&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; fieldNames = result.Facets.FieldNames; &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// [&quot;Author&quot;, &quot;Category&quot;]&lt;/em&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.88rem; color: #666; font-style: italic; margin-top: 16px;&quot;&gt;See the complete migration reference (Section 12) for S&amp;amp;N facet equivalents.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;7. Sorting, Pagination &amp;amp; Streaming&lt;/h2&gt;
&lt;h3&gt;Sorting&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Sort by property (descending)&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;OrderBy()&lt;/span&gt;&lt;/strong&gt; returns &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IOrderedContentQuery&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;, which allows chaining additional sort criteria with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ThenBy()&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Primary sort by date, secondary sort by title&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
.&lt;span style=&quot;color: #0000cc;&quot;&gt;ThenBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Ascending)&lt;/pre&gt;
&lt;h3&gt;Ranking &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;When using full-text search, sort by relevance score using the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;_ranking&lt;/span&gt;&lt;/strong&gt; pseudo-field with a &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;RankingMode&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingFullText&lt;/span&gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;UsingField&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, boost: &lt;span style=&quot;color: #800000;&quot;&gt;10&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;_ranking&quot;&lt;/span&gt;, &lt;span style=&quot;color: #004d40;&quot;&gt;RankingMode&lt;/span&gt;.Relevance)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;ThenBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Limit&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;15&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsContentAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Pagination&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Skip and Limit&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Skip&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;20&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Limit&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;10&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;IncludeTotal&lt;/span&gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();

&lt;span style=&quot;color: #000080;&quot;&gt;int&lt;/span&gt; totalCount = result.Total; &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// populated when IncludeTotal() is used&lt;/em&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;IAsyncEnumerable Streaming &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;For large result sets, stream results page-by-page without loading everything into memory:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;await foreach&lt;/span&gt; (&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; page &lt;span style=&quot;color: #000080;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsyncEnumerable&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;(pageSize: &lt;span style=&quot;color: #800000;&quot;&gt;50&lt;/span&gt;))
{
    &lt;span style=&quot;color: #000080;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; item &lt;span style=&quot;color: #000080;&quot;&gt;in&lt;/span&gt; page.Items)
    {
        &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Process each item&lt;/em&gt;&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;p style=&quot;font-size: 0.88rem; color: #666; font-style: italic; margin-top: 16px;&quot;&gt;See the complete migration reference (Section 12) for S&amp;amp;N sorting/pagination equivalents.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;8. Projections, Autocomplete &amp;amp; Locale&lt;/h2&gt;
&lt;h3&gt;Field Projection&lt;/h3&gt;
&lt;p&gt;Control which fields are returned to reduce payload size and improve performance:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Lambda-based (type-safe)&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;Recipe&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Name, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Description)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;p&gt;You can project to any class that has matching properties, as long as it does not implement &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentData&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;public class&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;RecipeResult&lt;/span&gt;
{
    &lt;span style=&quot;color: #000080;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: #000080;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #000080;&quot;&gt;set&lt;/span&gt;; }
    &lt;span style=&quot;color: #000080;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt; Description { &lt;span style=&quot;color: #000080;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #000080;&quot;&gt;set&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;h3&gt;Autocomplete&lt;/h3&gt;
&lt;p&gt;Provide type-ahead suggestions based on indexed field values:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Autocomplete&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;choc&quot;&lt;/span&gt;, limit: &lt;span style=&quot;color: #800000;&quot;&gt;5&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Locale and Multi-Language&lt;/h3&gt;
&lt;p&gt;Control which language versions of content are returned:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Single locale&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetLocale&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;en&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Multiple locales&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetLocale&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;en&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;sv&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// All locales&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetLocale&lt;/span&gt;(&lt;span style=&quot;color: #004d40;&quot;&gt;QueryLocale&lt;/span&gt;.All)&lt;/pre&gt;
&lt;p&gt;If &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SetLocale()&lt;/span&gt;&lt;/strong&gt; is not called, the SDK uses the default locale for the current thread.&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SetLocale&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;en&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;sv&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;9. Content Variations, Auth &amp;amp; Caching&lt;/h2&gt;
&lt;h3&gt;Content Variations &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Content Variations are a new concept in Optimizely Graph. Content Variations support scenarios like A/B testing and personalization where the same content exists in multiple variations.&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Include a specific variation plus the original content&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetVariation&lt;/span&gt;(includeOriginal: &lt;span style=&quot;color: #000080;&quot;&gt;true&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;WinterCampaign&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Include only the specific variation (exclude original)&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetVariation&lt;/span&gt;(includeOriginal: &lt;span style=&quot;color: #000080;&quot;&gt;false&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;WinterCampaign&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Include all variations via options builder&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;SetVariation&lt;/span&gt;(options &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt;
{
    options.Include = &lt;span style=&quot;color: #004d40;&quot;&gt;VariationScope&lt;/span&gt;.All;
    options.IncludeOriginal = &lt;span style=&quot;color: #000080;&quot;&gt;true&lt;/span&gt;;
})&lt;/pre&gt;
&lt;h3&gt;WithDisplayFilters() - Context-Aware Access (Recommended)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;WithDisplayFilters()&lt;/span&gt;&lt;/strong&gt; is the recommended approach for page rendering scenarios. It automatically detects the current user from &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Thread.CurrentPrincipal&lt;/span&gt;&lt;/strong&gt; and adjusts authentication accordingly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No authenticated user:&lt;/strong&gt; Uses SingleKey mode (public content only)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authenticated user detected:&lt;/strong&gt; Switches to BasicAuth with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;AsUser()&lt;/span&gt;&lt;/strong&gt;, making user-restricted content visible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always:&lt;/strong&gt; Filters to published content only&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Recommended for page rendering&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;WithDisplayFilters&lt;/span&gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;News&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsContentAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Authentication Quick Reference&lt;/h3&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.9rem;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Method&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Auth Mode&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Restricted Content&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Deleted/Expired&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;em&gt;(default)&lt;/em&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;SingleKey&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;No&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;No&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Public-facing pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;WithDisplayFilters()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Auto-detected&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Yes (if user detected)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;No (published only)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Page rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;AsUser(principal)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;SingleKey&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Yes (for that user)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;No&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;User-specific access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;WithAuth(options)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Configurable&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Yes (with BasicAuth)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Configurable&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Full control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Caching&lt;/h3&gt;
&lt;p&gt;The SDK caches Graph responses by default (5-minute absolute expiration). You can disable caching or configure custom options per query:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Disable caching&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;WithoutCache&lt;/span&gt;()

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Custom cache options&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;WithCacheOptions&lt;/span&gt;(options &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt;
{
    &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Configure cache duration, etc.&lt;/em&gt;&lt;/span&gt;
})&lt;/pre&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;10. Advanced Features&lt;/h2&gt;
&lt;h3&gt;Decay Functions - Time-Based Relevance &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Decay functions adjust document scores based on how far a DateTime field is from an origin value. Documents closer to the origin score higher, which can be useful for boosting recent content.&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;using static&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;Optimizely.Graph.Cms.Query.Linq.Request.GraphQueryFilter&lt;/span&gt;;

&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;Decay&lt;/span&gt;(x.PublishDate, &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;DecayOptions&lt;/span&gt;
    {
        Origin = &lt;span style=&quot;color: #004d40;&quot;&gt;DateTime&lt;/span&gt;.UtcNow,
        Scale = &lt;span style=&quot;color: #800000;&quot;&gt;30&lt;/span&gt;,
        Rate = &lt;span style=&quot;color: #800000;&quot;&gt;0.5f&lt;/span&gt;
    }))
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Factor - Numeric Field Scoring &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Factor()&lt;/span&gt;&lt;/strong&gt; uses a numeric field&#39;s value to influence relevance scores. Useful for boosting documents with higher popularity, stock, or rating:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;using static&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;Optimizely.Graph.Cms.Query.Linq.Request.GraphQueryFilter&lt;/span&gt;;

&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; factorOptions = &lt;span style=&quot;color: #000080;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004d40;&quot;&gt;FactorOptions&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;2.0f&lt;/span&gt;, &lt;span style=&quot;color: #004d40;&quot;&gt;FactorModifier&lt;/span&gt;.Sqrt);
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;Factor&lt;/span&gt;(x.StockQuantity, factorOptions))

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Combine with other conditions&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;Factor&lt;/span&gt;(x.StockQuantity, factorOptions) &lt;span style=&quot;color: #6b3a00;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.InStock)&lt;/pre&gt;
&lt;h3&gt;Pinned Results &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Promote specific content items when search queries match configured phrases (similar to Search &amp;amp; Navigation&#39;s &quot;Best Bets&quot;):&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;getting started&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;WithPinned&lt;/span&gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// With explicit phrase and collection&lt;/em&gt;&lt;/span&gt;
.&lt;span style=&quot;color: #0000cc;&quot;&gt;WithPinned&lt;/span&gt;(phrase: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;getting started&quot;&lt;/span&gt;, collectionId: myCollectionId)&lt;/pre&gt;
&lt;h3&gt;Named Queries &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Assign a name to your query for logging, tracing, and Graph analytics:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;WithName&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;SearchPage_MainQuery&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Summary)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();&lt;/pre&gt;
&lt;h3&gt;Inspecting Generated GraphQL&lt;/h3&gt;
&lt;p&gt;Use &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt; at any point in the chain to see the GraphQL that would be sent:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;string&lt;/span&gt; graphql = &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;chocolate&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Category &lt;span style=&quot;color: #6b3a00;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Dessert&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;OrderBy&lt;/span&gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.PublishDate, &lt;span style=&quot;color: #004d40;&quot;&gt;OrderDirection&lt;/span&gt;.Descending)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Limit&lt;/span&gt;(&lt;span style=&quot;color: #800000;&quot;&gt;10&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;ToGraphQL&lt;/span&gt;();

&lt;span style=&quot;color: #660033;&quot;&gt;_logger&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;LogDebug&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Generated GraphQL: {Query}&quot;&lt;/span&gt;, graphql);&lt;/pre&gt;
&lt;div style=&quot;border-left: 4px solid #16a34a; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dcfce7;&quot;&gt;&lt;strong&gt;Tip&lt;/strong&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt; is invaluable during development and debugging. Use it to verify your C# expressions produce the expected GraphQL, especially when building complex filter combinations.&lt;/p&gt;
&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;11. Working with Results &amp;amp; Untyped Queries&lt;/h2&gt;
&lt;h3&gt;IContentResult&amp;lt;T&amp;gt;&lt;/h3&gt;
&lt;p&gt;All queries return &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentResult&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;, which contains:&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.9rem;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Property&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Type&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Items&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;The result items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Total&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;int&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Total matching items (when &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IncludeTotal()&lt;/span&gt;&lt;/strong&gt; is used)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Cursor&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Cursor for cursor-based pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Facets&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Facet data&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Aggregation results from &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Facet()&lt;/span&gt;&lt;/strong&gt; calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;TrackUrls&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Track URL data&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;URLs for search tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;CorrelationId&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Correlation ID for diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;GetAsync() Variants&lt;/h3&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Standard execution with projected fields&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #004d40;&quot;&gt;IContentResult&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticleResult&lt;/span&gt;&amp;gt;(x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Title, x &lt;span style=&quot;color: #6b3a00;&quot;&gt;=&amp;gt;&lt;/span&gt; x.Author)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;();

&lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// Project to a different type at execution time&lt;/em&gt;&lt;/span&gt;
&lt;span style=&quot;color: #004d40;&quot;&gt;IContentResult&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;JsonElement&lt;/span&gt;&amp;gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Recipe&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Name&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Description&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;JsonElement&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;h3&gt;Streaming with GetAsContentAsyncEnumerable &lt;span style=&quot;display: inline-block; background: #16a34a; color: #fff; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; vertical-align: middle;&quot;&gt;New&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;For CMS content queries, stream results as fully resolved &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContent&lt;/span&gt;&lt;/strong&gt; objects:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;await foreach&lt;/span&gt; (&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; content &lt;span style=&quot;color: #000080;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;QueryContent&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;()
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsContentAsyncEnumerable&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;ArticlePage&lt;/span&gt;&amp;gt;())
{
    &lt;span style=&quot;color: #2e2e2e;&quot;&gt;&lt;em&gt;// content is IContent, fully resolved through the CMS content loader&lt;/em&gt;&lt;/span&gt;
}&lt;/pre&gt;
&lt;h3&gt;Untyped / Dynamic Queries&lt;/h3&gt;
&lt;p&gt;When the content type isn&#39;t known at compile time, use the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Query(string)&lt;/span&gt;&lt;/strong&gt; entry point:&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #000080;&quot;&gt;var&lt;/span&gt; result = &lt;span style=&quot;color: #000080;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;_graphClient&lt;/span&gt;
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Query&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Recipe&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;SearchFor&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Chocolate Cake&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Where&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;CookingTime&quot;&lt;/span&gt;, &lt;span style=&quot;color: #004d40;&quot;&gt;ComparisonOperator&lt;/span&gt;.LessThan, &lt;span style=&quot;color: #800000;&quot;&gt;30&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;Fields&lt;/span&gt;(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Name&quot;&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Description&quot;&lt;/span&gt;)
    .&lt;span style=&quot;color: #0000cc;&quot;&gt;GetAsync&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #004d40;&quot;&gt;JsonElement&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Generated GraphQL:&lt;/strong&gt;&lt;/p&gt;
&lt;pre style=&quot;background: #f4f4f5; color: #1e293b; border-radius: 8px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-family: &#39;SF Mono&#39;,&#39;Cascadia Code&#39;,&#39;Fira Code&#39;,Consolas,&#39;Courier New&#39;,monospace; font-size: 0.85rem; line-height: 1.6;&quot;&gt;{
  &lt;span style=&quot;color: #0000cc;&quot;&gt;Recipe&lt;/span&gt;(
    &lt;span style=&quot;color: #660033;&quot;&gt;where&lt;/span&gt;: {
      &lt;span style=&quot;color: #0000cc;&quot;&gt;cookingTime&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;lt&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;30&lt;/span&gt; }
      &lt;span style=&quot;color: #0000cc;&quot;&gt;_fulltext&lt;/span&gt;: { &lt;span style=&quot;color: #660033;&quot;&gt;match&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Chocolate Cake&quot;&lt;/span&gt; }
    }
  ) {
    &lt;span style=&quot;color: #0000cc;&quot;&gt;items&lt;/span&gt; { &lt;span style=&quot;color: #0000cc;&quot;&gt;Name&lt;/span&gt;  &lt;span style=&quot;color: #0000cc;&quot;&gt;Description&lt;/span&gt; }
  }
}&lt;/pre&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0;&quot;&gt;12. Complete Migration Reference&lt;/h2&gt;
&lt;p&gt;This table maps every Search &amp;amp; Navigation API to its Graph SDK equivalent. Use it as a quick reference during migration.&lt;/p&gt;
&lt;div style=&quot;overflow-x: auto; margin: 16px 0; border-radius: 8px; border: 1px solid #e2e8f0;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.9rem;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Feature&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Search &amp;amp; Navigation API&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Graph SDK API&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Entry point&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;client.Search&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;_graphClient.QueryContent&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Graph SDK is injected via DI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Full-text search&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.For(&quot;query&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.SearchFor(&quot;query&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;All fields search&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.InAllField()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.UsingFullText()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Field-targeted search&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.InField(x =&amp;gt; x.Title, 2.0)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.UsingField(x =&amp;gt; x.Title, boost: 2)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Highlight&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithHighlight(spec)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.UsingFullText(highlightTag: &quot;&amp;lt;mark&amp;gt;&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (equality)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Category.Match(&quot;News&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Category == &quot;News&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (comparison)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Rating.GreaterThan(3))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Rating &amp;gt; 3)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (range)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Price.InRange(10, 50))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Price.InRange(10, 50))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (contains)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Title.Contains(&quot;text&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Title.Contains(&quot;text&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (starts with)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Title.Prefix(&quot;How&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Title.StartsWith(&quot;How&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (ends with)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Not directly supported&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Title.EndsWith(&quot;Guide&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (in collection)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Tag.In(values))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Tag.In(values))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (exists)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Title.Exists())&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Title.Exists())&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Filter (wildcard)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.Title.MatchWildcard(&quot;app*&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.Title.Like(&quot;app%&quot;))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Different wildcard syntax&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Compound filter (AND)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; ...).Filter(x =&amp;gt; ...)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.A == &quot;a&quot; &amp;amp;&amp;amp; x.B == &quot;b&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Compound filter (OR)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Filter(x =&amp;gt; x.A.Match(&quot;a&quot;) | ...)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Where(x =&amp;gt; x.A == &quot;a&quot; || x.B == &quot;b&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Dynamic filters&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Combine Filter objects manually&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.BuildFilter&amp;lt;T&amp;gt;().And(...).Or(...)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Synonyms&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.UsingSynonyms()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Match(&quot;value&quot;, SynonymSlot.One)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Per-filter synonym support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;String facets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.TermsFacetFor(x =&amp;gt; x.Category)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Facet(x =&amp;gt; x.Category)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Date facets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.DateHistogramFacetFor(x =&amp;gt; x.Date, interval)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Facet(x =&amp;gt; x.Date, unit: FacetDateTimeUnit.DAY)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Numeric range facets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.RangeFacetFor(x =&amp;gt; x.Price, ranges)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Facet(x =&amp;gt; x.Price, ranges: buckets)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Boolean facets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Not available&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Facet(x =&amp;gt; x.IsFeatured)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;New in Graph SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Sort ascending&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderBy(x =&amp;gt; x.Date)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderBy(x =&amp;gt; x.Date, OrderDirection.Ascending)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Sort descending&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderByDescending(x =&amp;gt; x.Date)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderBy(x =&amp;gt; x.Date, OrderDirection.Descending)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Secondary sort&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ThenBy(x =&amp;gt; x.Title)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ThenBy(x =&amp;gt; x.Title, OrderDirection.Ascending)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Sort by relevance&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Not available&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderBy(&quot;_ranking&quot;, RankingMode.Relevance)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;New in Graph SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Pagination (skip)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Skip(20)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Skip(20)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Pagination (take)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Take(10)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Limit(10)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Total count&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Included by default&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.IncludeTotal()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Opt-in for performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Field projection&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Select(x =&amp;gt; new { x.Title })&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Fields&amp;lt;T&amp;gt;(x =&amp;gt; x.Title)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Autocomplete&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Via Statistics API&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Autocomplete(x =&amp;gt; x.Title, &quot;prefix&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Built into query API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Best bets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Via Best Bets UI&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithPinned()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Simplified API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Track search&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Track()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Track()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Locale&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Language(lang)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.SetLocale(&quot;en&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Execute (sync)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.GetResult()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;N/A&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Graph SDK is async-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Execute (async)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.GetResultAsync()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.GetAsync()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Streaming&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Not available&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.GetAsyncEnumerable&amp;lt;T&amp;gt;(pageSize)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;New in Graph SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Single result&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Not available&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.GetSingleAsync()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;New in Graph SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Auth (display filters)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Via display modes&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithDisplayFilters()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Auto-detects user context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3&gt;What&#39;s New (Graph SDK Only)&lt;/h3&gt;
&lt;p&gt;These features are available in the Graph SDK but &lt;strong&gt;did not exist&lt;/strong&gt; in Search &amp;amp; Navigation:&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.9rem;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Feature&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;API&lt;/th&gt;
&lt;th style=&quot;background: #1e293b; color: #fff; font-weight: 600; text-align: left; padding: 10px 14px;&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Content Variations&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;SetVariation()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Query A/B test and personalization variants&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;GraphQL Inspection&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;ToGraphQL()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;View the generated GraphQL query string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Cursor-Based Pagination&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Cursor&lt;/span&gt;&lt;/strong&gt; in &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContentResult&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Efficient deep pagination beyond skip/limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;IAsyncEnumerable Streaming&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsyncEnumerable&amp;lt;T&amp;gt;(pageSize)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Stream pages without loading all into memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Like Filter&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Like(&quot;app%&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;SQL-style wildcard patterns with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;%&lt;/span&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;_&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Boolean Facets&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.Facet(x =&amp;gt; x.IsFeatured)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Aggregate results by true/false values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Named Queries&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithName(&quot;name&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Tag queries for logging and Graph analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Cache Control&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithoutCache()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Per-query cache configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Cross-Type FilterBuilder&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.And&amp;lt;TSource, TOther&amp;gt;(expr)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Combine filters across different content types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Direct IContent Resolution&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetAsContentAsyncEnumerable&amp;lt;T&amp;gt;()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Resolve Graph results directly to &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IContent&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Decay Functions&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where(x =&amp;gt; Decay(field, options))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Time-based relevance scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Factor&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Where(x =&amp;gt; Factor(field, options))&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Numeric field relevance scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Pinned Results&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;WithPinned(phrase, collectionId)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Promote content for specific search phrases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Opt-In Total Count&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IncludeTotal()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Only calculate total when needed (perf opt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;GetSingleAsync&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;GetSingleAsync()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Return exactly one result or throw&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;ThenBy&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ThenBy(x =&amp;gt; x.Field, direction)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Secondary sort criteria after &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;OrderBy()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Ranking Mode&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.OrderBy(&quot;_ranking&quot;, RankingMode.Relevance)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Sort by relevance, boost, or index order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;WithDisplayFilters&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.WithDisplayFilters()&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top;&quot;&gt;Context-aware auth that auto-detects user&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 40px 0;&quot; /&gt;
&lt;h2 style=&quot;font-size: 1.65rem; font-weight: bold; color: #0f172a; margin-top: 56px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: none;&quot;&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;The Graph SDK already covers the vast majority of Search &amp;amp; Navigation query patterns. For most CMS content query scenarios (filtering, full-text search, faceting, sorting, pagination, autocomplete, and search tracking) you can migrate your existing code with straightforward API mapping.&lt;/p&gt;
&lt;p&gt;Additional capabilities are being added with each release. The SDK is actively evolving based on partner feedback and real-world migration experiences. If you encounter a pattern from Search &amp;amp; Navigation that doesn&#39;t have a direct equivalent yet, the Optimizely team wants to hear about it.&lt;/p&gt;
&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Optimizely.Graph.Cms.Query&lt;/span&gt;&lt;/strong&gt; package to your CMS 13 project.&lt;/li&gt;
&lt;li&gt;Register with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;services.AddGraphContentClient()&lt;/span&gt;&lt;/strong&gt; in your startup.&lt;/li&gt;
&lt;li&gt;Inject &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;IGraphContentClient&lt;/span&gt;&lt;/strong&gt; and start querying.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt; to inspect generated queries as you learn.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.developers.optimizely.com/platform-optimizely/v1.4.0-optimizely-graph/docs&quot;&gt;Optimizely Graph Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/link/6c9478a8761c41d88dfc32e9ef56e714.aspx&quot;&gt;Optimizely World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;border-left: 4px solid #16a34a; border-radius: 4px; padding: 16px 20px; margin: 20px 0; font-size: 0.93rem; background: #dcfce7;&quot;&gt;&lt;strong&gt;Key tip for your migration&lt;/strong&gt;
&lt;p&gt;Start with &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;.ToGraphQL()&lt;/span&gt;&lt;/strong&gt;. Write your Graph SDK queries, inspect the generated GraphQL, and compare it to what you expect. This feedback loop will build your confidence quickly and help you verify that your migrated queries produce the correct results.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin-top: 32px; font-size: 0.85rem; color: #888; font-style: italic;&quot;&gt;This guide is based on the &lt;strong&gt;&lt;span style=&quot;color: #8b0000;&quot;&gt;Optimizely.Graph.Cms.Query&lt;/span&gt;&lt;/strong&gt; SDK for Optimizely CMS 13. API details reflect the current SDK version and may evolve in future releases.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/jake-minard/dates/2026/3/introducing-optimizely-cms-13-graph-sdk/</guid>            <pubDate>Wed, 25 Mar 2026 02:51:18 GMT</pubDate>           <category>Blog post</category></item><item> <title>Introducing Optimizely Graph Source&#160;.NET&#160;SDK</title>            <link>https://world.optimizely.com/blogs/jake-minard/dates/2024/10/introducing-optimizely-graph-source-netsdk/</link>            <description>&lt;h3&gt;Overview Of Optimizely Graph&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Optimizely Graph&lt;/strong&gt; is a cutting-edge, headless content management solution designed to integrate seamlessly with any application. It empowers developers to access, manipulate, and query content through a unified graph structure using GraphQL. This approach allows for efficient, flexible content delivery across multiple platforms.&lt;/p&gt;
&lt;p&gt;With its dynamic capabilities, Optimizely Graph is ideal for content-driven applications where performance and flexibility are critical. It significantly enhances searchability and delivery, offering a robust foundation for enterprise-level digital experiences.&lt;/p&gt;
&lt;h3&gt;What Does The SDK&amp;nbsp;Offer?&lt;/h3&gt;
&lt;p&gt;The new &lt;strong&gt;Optimizely Graph SDK&lt;/strong&gt; takes the platform&amp;rsquo;s power to the next level by simplifying configuration and setup. This repository abstracts away the complexity of underlying API requests, allowing developers to configure content types, build data, and sync content with Optimizely Graph &amp;mdash; all with minimal effort in C#.&lt;/p&gt;
&lt;p&gt;The SDK is designed for easy integration into any .NET backend application. It empowers developers to push their data from external sources, allowing for a flexible content management process tailored to specific business needs.&lt;/p&gt;
&lt;h3&gt;How Does It&amp;nbsp;Work?&lt;/h3&gt;
&lt;p&gt;Getting started with the Optimizely Graph SDK is straightforward. First, initialize a new instance of the &lt;strong&gt;GraphSourceClient&lt;/strong&gt; by invoking the static &lt;code class=&quot;markup--code markup--p-code&quot;&gt;Create&lt;/code&gt; method. You&#39;ll need to pass in the base URL, source, application key, and secret, as shown below:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt; = &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;GraphSourceClient&lt;/span&gt;.Create(
      &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Uri&lt;/span&gt;(&lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;https://cg.optimizely.com&quot;&lt;/span&gt;),
      &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;source&quot;&lt;/span&gt;,
      &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;application-key&quot;&lt;/span&gt;,
      &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;secret&quot;&lt;/span&gt;
    );
&lt;/pre&gt;
&lt;p&gt;Once initialized, you can configure content types using any C# class object. This seamless integration allows you to manage your content directly within your existing application&amp;rsquo;s codebase.&lt;/p&gt;
&lt;p&gt;For example, imagine a caf&amp;eacute; that needs to configure content for its menu. With the Optimizely Graph SDK, you can model the menu&amp;rsquo;s structure using C# classes, making the process efficient and intuitive. Here&amp;rsquo;s a sample class definition for a caf&amp;eacute;:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Cafe&lt;/span&gt;
{
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;DateTime&lt;/span&gt; Established { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Location&lt;/span&gt; Address { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Menu&lt;/span&gt; Menu { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }
}

&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Location&lt;/span&gt;
{
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; City { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; State { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }
    
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; Zipcode { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; Country { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }  
}

&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Menu&lt;/span&gt;
{
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Beverage&lt;/span&gt; Beverage { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Food&lt;/span&gt; Food { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }
}

&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Beverage&lt;/span&gt;
{
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;double&lt;/span&gt; Price { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt;&amp;gt; Sizes { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

}

&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Food&lt;/span&gt;
{
    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;double&lt;/span&gt; Price { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }

    &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;bool&lt;/span&gt; IsAvaiable { &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;set&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;p&gt;In the C# object example above, we demonstrated how you can represent multiple data types, class types, and nested types, all of which can be effortlessly configured with Optimizely Graph. This flexibility allows you to model complex content structures directly within your application.&lt;/p&gt;
&lt;p&gt;By abstracting the complexity of setup and configuration, the SDK empowers developers to focus on building dynamic, high-performance applications without getting bogged down in the details of data management.&lt;/p&gt;
&lt;h3&gt;Configuring Content&amp;nbsp;Types&lt;/h3&gt;
&lt;p&gt;Now, let&amp;rsquo;s take it a step further and use the client we initialized earlier to configure these types in Optimizely Graph. With just a few lines of code, you can map and configure your content to be indexed efficiently.&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.ConfigureContentType&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Cafe&lt;/span&gt;&amp;gt;()
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Name, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Established, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Searchable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Address, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.PropertyType)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Menu, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.PropertyType);

&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.ConfigurePropertyType&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Location&lt;/span&gt;&amp;gt;()
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.City, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.State, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Zipcode, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Searchable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Country, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Searchable);

&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.ConfigurePropertyType&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Menu&lt;/span&gt;&amp;gt;()
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Beverage, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.PropertyType)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Food, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.PropertyType);

&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.ConfigurePropertyType&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Beverage&lt;/span&gt;&amp;gt;()
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Name, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Price, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Sizes, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Searchable);

&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.ConfigurePropertyType&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Food&lt;/span&gt;&amp;gt;()
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Name, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Price, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Queryable)
    .Field(&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.IsAvaiable, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;IndexingType&lt;/span&gt;.Searchable);&lt;/pre&gt;
&lt;h3&gt;Explaining Index&amp;nbsp;Types&lt;/h3&gt;
&lt;p&gt;In the example above, we&amp;rsquo;ve used several index types: &lt;strong&gt;PropertyType&lt;/strong&gt;, &lt;strong&gt;Searchable&lt;/strong&gt;, and &lt;strong&gt;Queryable&lt;/strong&gt;. Understanding these types is crucial for optimizing how Optimizely Graph indexes your content fields.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PropertyType&lt;/strong&gt; is used for nested data objects within your content structure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Queryable &lt;/strong&gt;allows filtering, ordering, and faceting by specific fields, with support for the &amp;ldquo;contains&amp;rdquo; operator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Searchable &lt;/strong&gt;enables full-text and semantic search using vectorized fields, with support for the &amp;ldquo;match&amp;rdquo; operator, ordering, and faceting.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These indexing options help you configure your content for faster reads and more precise queries.&lt;/p&gt;
&lt;h3&gt;Saving Content&amp;nbsp;Types&lt;/h3&gt;
&lt;p&gt;Before saving your content types, it&amp;rsquo;s important to set your preferred language. In this example, we&amp;rsquo;re using English:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.AddLanguage(&lt;span style=&quot;color: #a31515; font-weight: 400;&quot;&gt;&lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;Now you can use the initialized client to save your content types. The SDK handles building the request on the backend and interacts with Optimizely Graph on your behalf.&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.SaveTypesAsync();&lt;/pre&gt;
&lt;p&gt;Once this step is complete, you can visit the &lt;a href=&quot;https://cg.optimizely.com/app/graphiql&quot;&gt;Graph UI&lt;/a&gt; to view and query your configured types.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/e2dbc4122a184c5381dac6981cf0af6e.aspx&quot; width=&quot;1536&quot; alt=&quot;&quot; height=&quot;1304&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The Graph UI provides documentation on your content types and offers helpful tips for building GraphQL queries.&lt;/p&gt;
&lt;h3&gt;Synchronizing Your&amp;nbsp;Data&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s time to sync your content! To do this, simply create an instance of your class object and pass it into the client. Here&amp;rsquo;s an example using the &lt;code class=&quot;markup--code markup--p-code&quot;&gt;Cafe&lt;/code&gt; class:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;exampleDataInstance1&lt;/span&gt; = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Cafe&lt;/span&gt;
{
    Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Optimizely&#39;s Awesome Cafe&quot;&lt;/span&gt;,
    Established = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;DateTime&lt;/span&gt;(&lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;2024&lt;/span&gt;, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;06&lt;/span&gt;, &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;12&lt;/span&gt;),
    Address = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Location&lt;/span&gt;
    {
        City = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;New York&quot;&lt;/span&gt;,
        State = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;NY&quot;&lt;/span&gt;,
        Zipcode = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;10003&quot;&lt;/span&gt;,
        Country = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;USA&quot;&lt;/span&gt;
    },
    Menu = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Menu&lt;/span&gt;
    {
        Beverages = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;Beverage&lt;/span&gt;&amp;gt;
        {
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Espresso&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;4.99&lt;/span&gt;,
                Sizes = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;S&quot;&lt;/span&gt;, &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;M&quot;&lt;/span&gt; }
            },
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Latte&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;5.99&lt;/span&gt;,
                Sizes = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;M&quot;&lt;/span&gt;, &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;L&quot;&lt;/span&gt; }
            },
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Cappuccino&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;6.99&lt;/span&gt;,
                Sizes = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;[] { &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;S&quot;&lt;/span&gt;, &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;M&quot;&lt;/span&gt;, &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;L&quot;&lt;/span&gt; }
            }
        },
        Food = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #008a00; font-weight: 400;&quot;&gt;FoodItem&lt;/span&gt;&amp;gt;
        {
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Bagel&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;5.25&lt;/span&gt;,
                IsAvaiable = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;true&lt;/span&gt;
            },
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Croissant&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;3.89&lt;/span&gt;,
                IsAvaiable = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;true&lt;/span&gt;
            },
            &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;new&lt;/span&gt;() {
                Name = &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Cinnamon Roll&quot;&lt;/span&gt;,
                Price = &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;4.99&lt;/span&gt;,
                IsAvaiable = &lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;false&lt;/span&gt;
            }
        }
    }
};&lt;/pre&gt;
&lt;p&gt;To push your content to Optimizely Graph, you&amp;rsquo;ll need to assign a unique ID to each data instance.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the following example, we&amp;rsquo;ll use the caf&amp;eacute; name and city to generate a unique ID. This ID is crucial for identifying and updating content later. If content with the same ID is pushed again, it will be overwritten.&lt;/p&gt;
&lt;p&gt;Use the &lt;code class=&quot;markup--code markup--p-code&quot;&gt;SaveContentAsync&lt;/code&gt; method to push your content:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.SaveContentAsync(
    &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;generateId&lt;/span&gt;: (&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;) =&amp;gt; &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;$&quot;&lt;/span&gt;{&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Name}&lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;_&lt;/span&gt;{&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;.Address.City}&lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;&lt;/span&gt;, 
    &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;exampleDataInstance1&lt;/span&gt;
);&lt;/pre&gt;
&lt;p&gt;The SDK also supports pushing multiple objects at once by passing an array of data. The example below shows this with a comma separated parameter list.&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #0000ff; font-weight: 400;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;client&lt;/span&gt;.SaveContentAsync(
    &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;generateId&lt;/span&gt;: (&lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;x&lt;/span&gt;) =&amp;gt; &lt;span style=&quot;color: #bdb76b; font-weight: 400;&quot;&gt;Guid&lt;/span&gt;.NewGuid().ToString(), 
    &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;exampleDataInstance1&lt;/span&gt;,
    &lt;span style=&quot;color: #00b0e8; font-weight: 400;&quot;&gt;exampleDataInstance2&lt;/span&gt;,
    etc...
);&lt;/pre&gt;
&lt;h3&gt;What&amp;rsquo;s Next?&lt;/h3&gt;
&lt;p&gt;That&amp;rsquo;s it! You&amp;rsquo;ve successfully configured your content types and synced your data with Optimizely Graph.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you can revisit the Graph UI and run queries to retrieve your data. Here&amp;rsquo;s an example of what your query and response might look like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/contentassets/dac425aa8d804f7b91f7e9a2c253362f/cg_ui_2_a.jpg&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;/link/b1146b6227bf41cfaebc1d7c49b04061.aspx&quot; width=&quot;1536&quot; alt=&quot;&quot; height=&quot;849&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One of the great benefits of Optimizely Graph is the flexibility it offers through GraphQL. You can construct queries to meet your exact business needs, taking full advantage of a powerful Elasticsearch backend to query data efficiently.&lt;/p&gt;
&lt;h3&gt;Flexibility With&amp;nbsp;GraphQL&lt;/h3&gt;
&lt;p&gt;GraphQL provides the flexibility to filter and refine your results, enabling efficient and targeted content management. You can leverage any GraphQL query parameter to ensure that content retrieval is both precise and effective.&lt;/p&gt;
&lt;p&gt;As your content grows &amp;mdash; like adding more cafes with unique menus &amp;mdash; you can easily query your data using any field or nested field that was configured during setup. For instance, to find the name of a caf&amp;eacute; in Stockholm that serves espresso, you can write a GraphQL query like this:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;
  Cafe&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; en, 
    &lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;Address&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;City&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Stockholm&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;, 
      &lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;_and&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;Menu&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;Beverages&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;Name&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-weight: 400;&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #e9967a; font-weight: 400;&quot;&gt;&quot;Espresso&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;
    items&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;{&lt;/span&gt;
      Name
    &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: 400;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This flexibility allows you to create highly specific queries, ensuring your application gets exactly the data it needs with minimal overhead.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;The Optimizely Graph Source&amp;nbsp;.NET SDK simplifies and accelerates the process of integrating with Optimizely Graph. By abstracting the complexity of API requests and streamlining content type configuration, it enables developers to focus on building high-performance applications.&lt;/p&gt;
&lt;p&gt;With future plans to extend this SDK into other tech stacks, Optimizely continues to make content management more accessible and provide simpler solutions for developers.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/episerver/graph-source-sdk&quot;&gt;Graph Source SDK&lt;/a&gt; code repository is open source, with ongoing development and improvements, and further plans to convert it into a NuGet package.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/jake-minard/dates/2024/10/introducing-optimizely-graph-source-netsdk/</guid>            <pubDate>Tue, 15 Oct 2024 15:20:03 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>