# C1.LiveLinq.Indexing.ScannerCollection-1.Add

## Content

<div class="doc-site-dotnet-api-container">



<h1 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*">Add Method
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>



<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean_C1_LiveLinq_Indexing_IndexingAlgorithm_System_Globalization_CultureInfo_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Boolean,System.Boolean,C1.LiveLinq.Indexing.IndexingAlgorithm,System.Globalization.CultureInfo)">Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt;, bool, bool, IndexingAlgorithm, CultureInfo)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T, TKey&gt; Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt; keySelector, bool keyIsUnique, bool onlyOnce, IndexingAlgorithm algorithm, CultureInfo locale)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(Of TKey)(keySelector As Expression(Of Func(Of T, TKey)), keyIsUnique As Boolean, onlyOnce As Boolean, algorithm As IndexingAlgorithm, locale As CultureInfo) As IIndexScanner(Of T, TKey)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.expression-1">Expression</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;T, TKey&gt;&gt;</td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">keyIsUnique</span></td>
      <td><p>Specifies whether the key used in this index is a unique key for the indexed collection (default: <b>false</b>).</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">onlyOnce</span></td>
      <td><p>Specifies whether it is required that the index does not exist prior to this method call (default: <b>false</b>).
If an index with this <i>keySelector</i> already exists, an exception is thrown if it is <b>true</b>,
and this method call is ignored if it is <b>false</b>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.IndexingAlgorithm.html">IndexingAlgorithm</a></td>
      <td><span class="parametername">algorithm</span></td>
      <td><p>An <a class="xref" href="C1.LiveLinq.Indexing.IndexingAlgorithm.html">IndexingAlgorithm</a> used by the index. In the current version, only one algorithm
is supported, RedBlackTree. Later versions may support other algorithms, such as bitmap or hash indexes.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo">CultureInfo</a></td>
      <td><span class="parametername">locale</span></td>
      <td><p>Locale information used to compare strings in the index (default: <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo.currentculture">CultureInfo.CurrentCulture</a>).</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-2.html">IIndexScanner</a>&lt;T, TKey&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span class="parametername">TKey</span></td>
      <td><p>The type of the index key.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean_C1_LiveLinq_Indexing_IndexingAlgorithm_System_Globalization_CultureInfo__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>A unique index occupies less memory and performs better than a non-unique index (although the difference isn't dramatic).
Therefore, for unique keys, it's recommended to specify the corresponding index as unique.</p>
<p>But do that only if you are sure that the key is indeed unique, as it imposes a uniqueness constraint on the indexed collection.
An attempt to modify the indexed collection violating the uniqueness throws an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.invalidoperationexception">InvalidOperationException</a>.</p>
</div>


<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean_System_Globalization_CultureInfo_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Boolean,System.Boolean,System.Globalization.CultureInfo)">Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt;, bool, bool, CultureInfo)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T, TKey&gt; Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt; keySelector, bool keyIsUnique, bool onlyOnce, CultureInfo locale)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(Of TKey)(keySelector As Expression(Of Func(Of T, TKey)), keyIsUnique As Boolean, onlyOnce As Boolean, locale As CultureInfo) As IIndexScanner(Of T, TKey)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.expression-1">Expression</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;T, TKey&gt;&gt;</td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">keyIsUnique</span></td>
      <td><p>Specifies whether the key used in this index is a unique key for the indexed collection (default: <b>false</b>).</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">onlyOnce</span></td>
      <td><p>Specifies whether it is required that the index does not exist prior to this method call (default: <b>false</b>).
If an index with this <i>keySelector</i> already exists, an exception is thrown if it is <b>true</b>,
and this method call is ignored if it is <b>false</b>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo">CultureInfo</a></td>
      <td><span class="parametername">locale</span></td>
      <td><p>Locale information used to compare strings in the index (default: <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo.currentculture">CultureInfo.CurrentCulture</a>).</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-2.html">IIndexScanner</a>&lt;T, TKey&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span class="parametername">TKey</span></td>
      <td><p>The type of the index key.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean_System_Globalization_CultureInfo__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>A unique index occupies less memory and performs better than a non-unique index (although the difference isn't dramatic).
Therefore, for unique keys, it's recommended to specify the corresponding index as unique.</p>
<p>But do that only if you are sure that the key is indeed unique, as it imposes a uniqueness constraint on the indexed collection.
An attempt to modify the indexed collection violating the uniqueness throws an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.invalidoperationexception">InvalidOperationException</a>.</p>
</div>


<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Boolean,System.Boolean)">Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt;, bool, bool)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T, TKey&gt; Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt; keySelector, bool keyIsUnique, bool onlyOnce)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(Of TKey)(keySelector As Expression(Of Func(Of T, TKey)), keyIsUnique As Boolean, onlyOnce As Boolean) As IIndexScanner(Of T, TKey)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.expression-1">Expression</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;T, TKey&gt;&gt;</td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">keyIsUnique</span></td>
      <td><p>Specifies whether the key used in this index is a unique key for the indexed collection (default: <b>false</b>).</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">onlyOnce</span></td>
      <td><p>Specifies whether it is required that the index does not exist prior to this method call (default: <b>false</b>).
If an index with this <i>keySelector</i> already exists, an exception is thrown if it is <b>true</b>,
and this method call is ignored if it is <b>false</b>.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-2.html">IIndexScanner</a>&lt;T, TKey&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span class="parametername">TKey</span></td>
      <td><p>The type of the index key.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_System_Boolean__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>A unique index occupies less memory and performs better than a non-unique index (although the difference isn't dramatic).
Therefore, for unique keys, it's recommended to specify the corresponding index as unique.</p>
<p>But do that only if you are sure that the key is indeed unique, as it imposes a uniqueness constraint on the indexed collection.
An attempt to modify the indexed collection violating the uniqueness throws an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.invalidoperationexception">InvalidOperationException</a>.</p>
</div>


<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Boolean)">Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt;, bool)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T, TKey&gt; Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt; keySelector, bool keyIsUnique)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(Of TKey)(keySelector As Expression(Of Func(Of T, TKey)), keyIsUnique As Boolean) As IIndexScanner(Of T, TKey)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.expression-1">Expression</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;T, TKey&gt;&gt;</td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">keyIsUnique</span></td>
      <td><p>Specifies whether the key used in this index is a unique key for the indexed collection (default: <b>false</b>).</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-2.html">IIndexScanner</a>&lt;T, TKey&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span class="parametername">TKey</span></td>
      <td><p>The type of the index key.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___System_Boolean__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>A unique index occupies less memory and performs better than a non-unique index (although the difference isn't dramatic).
Therefore, for unique keys, it's recommended to specify the corresponding index as unique.</p>
<p>But do that only if you are sure that the key is indeed unique, as it imposes a uniqueness constraint on the indexed collection.
An attempt to modify the indexed collection violating the uniqueness throws an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.invalidoperationexception">InvalidOperationException</a>.</p>
</div>


<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add__1_System_Linq_Expressions_Expression_System_Func__0___0___" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})">Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt;)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T, TKey&gt; Add&lt;TKey&gt;(Expression&lt;Func&lt;T, TKey&gt;&gt; keySelector)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(Of TKey)(keySelector As Expression(Of Func(Of T, TKey))) As IIndexScanner(Of T, TKey)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.expression-1">Expression</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;T, TKey&gt;&gt;</td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-2.html">IIndexScanner</a>&lt;T, TKey&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span class="parametername">TKey</span></td>
      <td><p>The type of the index key.</p>
</td>
    </tr>
  </tbody>
</table>


<a id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add*"></a>
<h4 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_System_Linq_Expressions_LambdaExpression_System_Boolean_System_Boolean_C1_LiveLinq_Indexing_IndexingAlgorithm_System_Globalization_CultureInfo_" data-uid="C1.LiveLinq.Indexing.ScannerCollection`1.Add(System.Linq.Expressions.LambdaExpression,System.Boolean,System.Boolean,C1.LiveLinq.Indexing.IndexingAlgorithm,System.Globalization.CultureInfo)">Add(LambdaExpression, bool, bool, IndexingAlgorithm, CultureInfo)</h4>
<div class="markdown level1 summary"><p>Creates a new index and adds it to the collection of indexes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public IIndexScanner&lt;T&gt; Add(LambdaExpression keySelector, bool keyIsUnique, bool onlyOnce, IndexingAlgorithm algorithm, CultureInfo locale)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Function Add(keySelector As LambdaExpression, keyIsUnique As Boolean, onlyOnce As Boolean, algorithm As IndexingAlgorithm, locale As CultureInfo) As IIndexScanner(Of T)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.linq.expressions.lambdaexpression">LambdaExpression</a></td>
      <td><span class="parametername">keySelector</span></td>
      <td><p>Key selector expression of the index, see <a class="xref" href="C1.LiveLinq.Indexing.IndexDefinition-1.KeySelector.html#C1_LiveLinq_Indexing_IndexDefinition_1_KeySelector">KeySelector</a>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">keyIsUnique</span></td>
      <td><p>Specifies whether the key used in this index is a unique key for the indexed collection (default: <b>false</b>).</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></td>
      <td><span class="parametername">onlyOnce</span></td>
      <td><p>Specifies whether it is required that the index does not exist prior to this method call.
If an index with this <i>keySelector</i> already exists, an exception is thrown if it is <b>true</b>,
and this method call is ignored if it is <b>false</b>.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.IndexingAlgorithm.html">IndexingAlgorithm</a></td>
      <td><span class="parametername">algorithm</span></td>
      <td><p>An <a class="xref" href="C1.LiveLinq.Indexing.IndexingAlgorithm.html">IndexingAlgorithm</a> used by the index. In the current version, only one algorithm
is supported, RedBlackTree. Later versions may support other algorithms, such as bitmap or hash indexes.</p>
</td>
    </tr>
    <tr>
      <td><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo">CultureInfo</a></td>
      <td><span class="parametername">locale</span></td>
      <td><p>Locale information used to compare strings in the index (default: <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo.currentculture">CultureInfo.CurrentCulture</a>).</p>
</td>
    </tr>
  </tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-condensed">
  <thead>
    <tr>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a class="xref" href="C1.LiveLinq.Indexing.Search.IIndexScanner-1.html">IIndexScanner</a>&lt;T&gt;</td>
      <td><p>The new index added to the collection of indexes.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_Indexing_ScannerCollection_1_Add_System_Linq_Expressions_LambdaExpression_System_Boolean_System_Boolean_C1_LiveLinq_Indexing_IndexingAlgorithm_System_Globalization_CultureInfo__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>A unique index occupies less memory and performs better than a non-unique index (although the difference isn't dramatic).
Therefore, for unique keys, it's recommended to specify the corresponding index as unique.</p>
<p>But do that only if you are sure that the key is indeed unique, as it imposes a uniqueness constraint on the indexed collection.
An attempt to modify the indexed collection violating the uniqueness throws an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.invalidoperationexception">InvalidOperationException</a>.</p>
</div>
</div>
