# Creating Live View

## Content



Consider a simple query

```auto
from a in A where a.p == 1 select a
```

In standard LINQ, the result of this query is a snapshot. The result collection is formed at the time when the query is executed and it does not change after that. If one of its objects changes so it no longer satisfies the condition, that object will not be removed from the result collection. And if an object in **A** changes so it now satisfies the condition, that object will not be added to the result collection. The result of even such a simple query is not live, not dynamic, does not change automatically when the base collection **A** changes, not kept in sync automatically with the base data.

In LiveLinq, if we create a view based on that query, it will be live, dynamic, will change automatically when the base data changes, will be automatically kept in sync with the base data.

All we need to do to make a view out of this query is to use the extension method **.AsLive()**:

```auto
var view = from a in A.AsLive() where a.p == 1 select a;
```

The **AsLive()** extension method is the analog of [AsIndexed()](/componentone/api/win/online-datasource/dotnet-framework-api/C1.LiveLinq.4.8/C1.LiveLinq.AdoNet.AdoNetExtensions.AsIndexed.html) Method/**ToIndexed()**, it can be used everywhere where the [AsIndexed()](/componentone/api/win/online-datasource/dotnet-framework-api/C1.LiveLinq.4.8/C1.LiveLinq.AdoNet.AdoNetExtensions.AsIndexed.html) Method/**ToIndexed()** extension methods can be used. So, live views are supported in all cases in LiveLinq to Objects, LiveLinq to XML and LiveLinq to DataSet (with some restrictions on the supported query operators, see [Query Operators Supported in Live Views](/componentone/docs/win/online-datasource/ComponentOneLiveLinq/LiveLinqProgrammingGuide/QueryOperatorsSupportedLiveViews)). The difference between [AsIndexed()](/componentone/api/win/online-datasource/dotnet-framework-api/C1.LiveLinq.4.8/C1.LiveLinq.AdoNet.AdoNetExtensions.AsIndexed.html) Method/**ToIndexed()** and **AsLive()** is that **AsLive()** creates a view, thus enabling LiveLinq both to query to populate the view and to maintain the view after it has been initially populated. The [AsIndexed()](/componentone/api/win/online-datasource/dotnet-framework-api/C1.LiveLinq.4.8/C1.LiveLinq.AdoNet.AdoNetExtensions.AsIndexed.html) Method/**ToIndexed()** extension methods do only the first part, enable LiveLinq querying.

The example above is a very simple one, it's just one simple Where condition. There are other tools that can do the same, for example, **DataView** in ADO.NET or **CollectionView** in WPF. The power of LiveLinq is that it supports most of the LINQ operators, including joins and others. So you can create a live view based not just on a simple condition, but on virtually any query you need.