Delen via


Een DataView-object maken (LINQ naar DataSet)

Er zijn twee manieren om een DataView in de LINQ naar DataSet-context te maken. U kunt een DataView van een LINQ maken naar een DataSet-query via een DataTable, of u kunt deze maken op basis van een getypte of niet-getypte DataTablequery. In beide gevallen maakt u de DataView extensiemethode met behulp van een van de AsDataView extensiemethoden. DataView Het is niet rechtstreeks constructeerbaar in de LINQ naar de DataSet-context.

Nadat de toepassing DataView is gemaakt, kunt u het verbinden met een ui-besturingselement in een Windows-formuliertoepassing of een ASP.NET toepassing, of de filter- en sorteerinstellingen wijzigen.

DataView maakt een index, waardoor de prestaties van bewerkingen die de index kunnen gebruiken aanzienlijk worden verhoogd, zoals filteren en sorteren. De index voor een DataView wordt gemaakt, zowel wanneer de DataView gegevens worden gemaakt als wanneer een van de sorteer- of filtergegevens wordt gewijzigd. Het maken van een DataView en vervolgens het instellen van de sorteer- of filtergegevens zorgt ervoor dat de index ten minste twee keer wordt gebouwd: eenmaal wanneer de DataView wordt gemaakt en opnieuw wanneer een van de sorteer- of filtereigenschappen wordt gewijzigd.

Zie Filteren met DataView en Sorteren met DataView voor meer informatie over filteren en sorteren DataViewmet DataView.

DataView maken van een LINQ naar DataSet-query

Een DataView object kan worden gemaakt op basis van de resultaten van een LINQ naar DataSet-query, waarbij de resultaten een projectie van DataRow objecten zijn. De zojuist gemaakte DataView gegevens nemen de filter- en sorteergegevens over van de query waaruit deze is gemaakt.

Notitie

In de meeste gevallen mogen de expressies die worden gebruikt voor filteren en sorteren, geen bijwerkingen hebben en moeten ze deterministisch zijn. De expressies mogen ook geen logica bevatten die afhankelijk is van een vast aantal uitvoeringen, omdat de sorteer- en filterbewerkingen een willekeurig aantal keren kunnen worden uitgevoerd.

Het maken van een DataView query die anonieme typen of query's retourneert die joinbewerkingen uitvoeren, wordt niet ondersteund.

Alleen de volgende queryoperators worden ondersteund in een query die wordt gebruikt om te maken DataView:

Houd er rekening mee dat wanneer een DataView van een LINQ naar DataSet-query wordt gemaakt, de Select methode de laatste methode moet zijn die in de query wordt aangeroepen. Dit wordt weergegeven in het volgende voorbeeld, waarmee een DataView aantal onlineorders wordt gemaakt, gesorteerd op totaal verschuldigd:

DataTable orders = _dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag")
    orderby order.Field<decimal>("TotalDue")
    select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

U kunt ook de op tekenreeksen gebaseerde RowFilter eigenschappen Sort gebruiken om een DataView tekenreeks te filteren en te sorteren nadat deze is gemaakt op basis van een query. Houd er rekening mee dat hiermee de sorteer- en filtergegevens worden gewist die zijn overgenomen van de query. In het volgende voorbeeld wordt een DataView van een LINQ naar DataSet-query gemaakt die filtert op achternamen die beginnen met 'S'. De eigenschap op basis van Sort tekenreeksen wordt ingesteld om te sorteren op achternamen in oplopende volgorde en vervolgens op voornamen in aflopende volgorde:

DataTable contacts = _dataSet.Tables["Contact"];

EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
                                         where contact.Field<string>("LastName").StartsWith("S")
                                         select contact;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.Sort = "LastName desc, FirstName asc";
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim query = _
    From contact In contacts.AsEnumerable() _
    Where contact.Field(Of String)("LastName").StartsWith("S") _
    Select contact

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = "LastName desc, FirstName asc"

Een DataView maken op basis van een gegevenstabel

Naast het maken van een LINQ naar DataSet-query, kan een DataView object worden gemaakt op basis van een DataTable met behulp van de AsDataView methode.

In het volgende voorbeeld wordt een DataView tabel SalesOrderDetail gemaakt en ingesteld als de gegevensbron van een BindingSource object. Dit object fungeert als proxy voor een DataGridView besturingselement.

DataTable orders = _dataSet.Tables["SalesOrderDetail"];

DataView view = orders.AsDataView();
bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();
Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")

Dim view As DataView = orders.AsDataView()
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

Filteren en sorteren kan worden ingesteld op de DataView nadat deze is gemaakt op basis van een DataTable. In het volgende voorbeeld wordt een DataView uit de tabel Contactpersoon gemaakt en wordt de Sort eigenschap ingesteld om op achternamen in oplopende volgorde en vervolgens voornamen in aflopende volgorde te sorteren:

DataTable contacts = _dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc, FirstName asc";

bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim view As DataView = contacts.AsDataView()

view.Sort = "LastName desc, FirstName asc"

bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

Er is echter sprake van prestatieverlies bij het instellen van de RowFilter of Sort eigenschap nadat de DataView query is gemaakt, omdat DataView er een index wordt samengesteld ter ondersteuning van filter- en sorteerbewerkingen. Als u de RowFilter index voor de gegevens instelt of Sort opnieuw bouwt, voegt u overhead toe aan uw toepassing en verlaagt u de prestaties. Indien mogelijk is het beter om de filter- en sorteergegevens op te geven wanneer u de DataView gegevens voor het eerst maakt en deze daarna niet wijzigt.

Zie ook