Vytvoření objektu DataView (LINQ to DataSet)
Existují dva způsoby, jak vytvořit DataView kontext LINQ to DataSet. Můžete vytvořit DataView dotaz z LINQ to DataSet přes DataTable, nebo ho můžete vytvořit z typu nebo netypovaný DataTable. V obou případech vytvoříte DataView metodu pomocí jedné z AsDataView rozšiřujících metod; DataView není přímo konstruktovatelná v kontextu LINQ to DataSet.
DataView Po vytvoření můžete vytvořit vazbu na ovládací prvek uživatelského rozhraní v aplikaci Windows Forms nebo v aplikaci ASP.NET nebo změnit nastavení filtrování a řazení.
DataView vytvoří index, který výrazně zvyšuje výkon operací, které mohou používat index, jako je filtrování a řazení. Index pro objekt se DataView sestaví při DataView vytvoření i při úpravě některého z informací o řazení nebo filtrování. DataView Vytvoření a následné nastavení informací o řazení nebo filtrování později způsobí, že se index sestaví alespoň dvakrát: jednou po DataView vytvoření a znovu při úpravě některé vlastnosti řazení nebo filtru.
Další informace o filtrování a řazení pomocí DataView, naleznete v tématu Filtrování pomocí DataView a řazení pomocí DataView.
Vytvoření zobrazení dat z dotazu LINQ to DataSet
Objekt DataView lze vytvořit z výsledků dotazu LINQ to DataSet, kde jsou výsledky projekce DataRow objektů. Nově vytvořený DataView zdědí informace o filtrování a řazení z dotazu, ze které se vytvoří.
Poznámka:
Ve většině případů by výrazy použité pro filtrování a řazení neměly mít vedlejší účinky a musí být deterministické. Výrazy by také neměly obsahovat žádnou logiku, která závisí na nastaveném počtu spuštění, protože operace řazení a filtrování se můžou spouštět kolikrát.
DataView Vytvoření dotazu, který vrací anonymní typy nebo dotazy, které provádějí operace spojení, není podporováno.
V dotazu použitém k vytvoření DataViewse podporují pouze následující operátory dotazu:
Všimněte si, že při DataView vytvoření z LINQ to DataSet dotaz musí Select být metoda poslední metodou volanou v dotazu. To je vidět v následujícím příkladu, který vytvoří DataView online objednávky seřazené podle celkového termínu splnění:
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
Pomocí řetězců RowFilter a Sort vlastností můžete také filtrovat a řadit DataView po jeho vytvoření z dotazu. Všimněte si, že tím vymažete informace o řazení a filtrování zděděné z dotazu. Následující příklad vytvoří DataView z dotazu LINQ to DataSet, který filtruje podle příjmení začínajících písmenem S. Vlastnost založená na Sort řetězci je nastavena tak, aby seřadil příjmení ve vzestupném pořadí a potom křestní jména v sestupném pořadí:
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"
Vytvoření zobrazení dat z datové tabulky
Kromě vytvoření z dotazu DataView LINQ to DataSet lze objekt vytvořit z DataTable AsDataView metody.
Následující příklad vytvoří DataView z SalesOrderDetail tabulky a nastaví ji jako zdroj dat objektu BindingSource . Tento objekt funguje jako proxy pro DataGridView ovládací prvek.
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()
Filtrování a řazení lze nastavit po DataView vytvoření z objektu DataTable. Následující příklad vytvoří DataView z tabulky Kontakt a nastaví Sort vlastnost řazení podle příjmení ve vzestupném pořadí a potom křestní jména v sestupném pořadí:
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()
Dojde však ke ztrátě výkonu, která se dodává s nastavením RowFilter nebo vlastností po DataView vytvoření z dotazu, protože DataView vytváří index pro podporu operací Sort filtrování a řazení. RowFilter Nastavení nebo Sort vlastnosti znovu sestaví index dat, přidá režii vaší aplikace a sníží výkon. Pokud je to možné, je lepší určit informace o filtrování a řazení při prvním vytvoření DataView a vyhnout se jejich následné úpravě.