# C1.LiveLinq.LiveViewExtensions.AsUpdatable

## Content

<div class="doc-site-dotnet-api-container">



<h1 id="C1_LiveLinq_LiveViewExtensions_AsUpdatable_" data-uid="C1.LiveLinq.LiveViewExtensions.AsUpdatable*">AsUpdatable Method
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>



<a id="C1_LiveLinq_LiveViewExtensions_AsUpdatable_" data-uid="C1.LiveLinq.LiveViewExtensions.AsUpdatable*"></a>
<h4 id="C1_LiveLinq_LiveViewExtensions_AsUpdatable__1_C1_LiveLinq_LiveViews_View___0__" data-uid="C1.LiveLinq.LiveViewExtensions.AsUpdatable``1(C1.LiveLinq.LiveViews.View{``0})">AsUpdatable&lt;T&gt;(View&lt;T&gt;)</h4>
<div class="markdown level1 summary"><p>Specifies a view as updatable.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public static View&lt;T&gt; AsUpdatable&lt;T&gt;(this View&lt;T&gt; view)</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public Shared Function AsUpdatable(Of T)(view As View(Of T)) As View(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="C1.LiveLinq.LiveViews.View-1.html">View</a>&lt;T&gt;</td>
      <td><span class="parametername">view</span></td>
      <td><p>The view to specify as updatable.</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.LiveViews.View-1.html">View</a>&lt;T&gt;</td>
      <td><p>The same <i>view</i>.</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">T</span></td>
      <td><p>The type of the elements in the view.</p>
</td>
    </tr>
  </tbody>
</table>
<h5 id="C1_LiveLinq_LiveViewExtensions_AsUpdatable__1_C1_LiveLinq_LiveViews_View___0___remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>This method is used with <b>Join</b> operation to specify which of the two parts of the join you want to be updatable.</p>
<p>Properties exposed by a view can be updatable or read-only. Updatable properties of a view can be modified directly in the view.
Read-only properties of a view cannot be modified directly in the view, but they still reflect up-to-date values of the source,
so the difference is often not critical, you can always modify corresponding property in the source, that
will automatically change the property in the view.</p>
<p>Only one of the two arguments of a <b>Join</b> can be updatable, the one you qualified with <b>AsUpdatable()</b>.
In absence of this qualification, both parts of the join are read-only. For example, in
<pre><code class="lang-csharp">from c in customers.AsLive()
join o in orders.AsLive().AsUpdatable() on o.CustomerID equals c.CustomerID
select new { c.CustomerName, o.OrderDate, o.OrderAmount }</code></pre>
<b>CustomerName</b> is read-only, and <b>OrderDate</b> and <b>OrderAmount</b> are updatable.
</div>
<h5 id="C1_LiveLinq_LiveViewExtensions_AsUpdatable__1_C1_LiveLinq_LiveViews_View___0___seealso">See Also</h5>
<div class="seealso">
    <div><a class="xref" href="C1.LiveLinq.LiveViews.View.IsReadOnly.html#C1_LiveLinq_LiveViews_View_IsReadOnly">IsReadOnly</a></div>
    <div><a class="xref" href="C1.LiveLinq.LiveViews.ViewRow.html">ViewRow</a></div>
    <div><a class="xref" href="C1.LiveLinq.LiveViews.ViewRowState.html">ViewRowState</a></div>
</div>
</div>
