Share via


DataView Nesnesi Oluşturma (LINQ to DataSet)

LINQ to DataSet bağlamında oluşturmanın DataView iki yolu vardır. DataView bir LINQ'ten DataSet sorgusuna bir üzerinden DataTableoluşturabilir veya türü veya türü DataTablebelirtilmemiş bir sorgudan oluşturabilirsiniz. Her iki durumda da uzantı yöntemlerinden AsDataView birini kullanarak öğesini oluşturursunuzDataView; DataView LINQ to DataSet bağlamında doğrudan oluşturulamaz.

DataView oluşturulduktan sonra, bunu bir Windows forms uygulamasındaki veya ASP.NET uygulamasındaki bir kullanıcı arabirimi denetimine bağlayabilir veya filtreleme ve sıralama ayarlarını değiştirebilirsiniz.

DataView , filtreleme ve sıralama gibi dizini kullanabilen işlemlerin performansını önemli ölçüde artıran bir dizin oluşturur. için DataView dizin, hem oluşturulduğunda hem de DataView sıralama veya filtreleme bilgilerinden herhangi biri değiştirildiğinde oluşturulur. DataView ve sonra sıralama veya filtreleme bilgilerinin ayarlanması dizinin en az iki kez oluşturulmasına neden olur: oluşturulduğunda bir kez DataView ve sıralama veya filtre özelliklerinden herhangi biri değiştirildiğinde.

ile DataViewfiltreleme ve sıralama hakkında daha fazla bilgi için bkz. DataView ile filtreleme ve DataView ile Sıralama.

LINQ'ten DataSet Sorgusuna DataView Oluşturma

Bir DataView nesne, linq to DataSet sorgusunun sonuçlarından oluşturulabilir ve burada sonuçlar nesnelerin projeksiyonu DataRow olur. Yeni oluşturulan DataView , filtreleme ve sıralama bilgilerini oluşturulduğu sorgudan devralır.

Not

Çoğu durumda, filtreleme ve sıralama için kullanılan ifadelerin yan etkileri olmamalıdır ve belirleyici olmalıdır. Ayrıca, sıralama ve filtreleme işlemleri birkaç kez yürütülebileceği için ifadeler belirli sayıda yürütmeye bağlı herhangi bir mantık içermemelidir.

DataView Anonim türler veya birleştirme işlemleri gerçekleştiren sorgular döndüren bir sorgudan oluşturma desteklenmez.

Oluşturmak DataViewiçin kullanılan bir sorguda yalnızca aşağıdaki sorgu işleçleri desteklenir:

DataView Bir LINQ to DataSet sorgusundan oluşturulduğunda yöntemin Select sorguda çağrılan son yöntem olması gerektiğini unutmayın. Bu, süresi dolan toplama göre sıralanmış bir DataView çevrimiçi sipariş oluşturan aşağıdaki örnekte gösterilmiştir:

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

Ayrıca dize tabanlı RowFilter ve Sort özelliklerini kullanarak bir sorgudan oluşturulduktan sonra filtreleyebilir DataView ve sıralayabilirsiniz. Bunun sorgudan devralınan sıralama ve filtreleme bilgilerini temizleyeceğini unutmayın. Aşağıdaki örnek, 'S' ile başlayan soyadlarına göre filtreleyen bir DataView LINQ to DataSet sorgusu oluşturur. Dize tabanlı Sort özellik, soyadlarına artan düzende ve ardından adlara azalan düzende sıralanacak şekilde ayarlanır:

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"

DataTable'dan DataView Oluşturma

LINQ to DataSet sorgusundan oluşturulmaya ek olarak, DataView yöntemi kullanılarak AsDataView bir DataTable nesnesi de oluşturulabilir.

Aşağıdaki örnek SalesOrderDetail tablosundan bir DataView oluşturur ve bunu bir BindingSource nesnenin veri kaynağı olarak ayarlar. Bu nesne bir denetim için DataGridView ara sunucu işlevi görür.

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()

Filtreleme ve sıralama, uygulamasından DataTableoluşturulduktan sonra üzerinde DataView ayarlanabilir. Aşağıdaki örnek, Kişi tablosundan bir DataView oluşturur ve özelliğini artan düzende soyadlara ve ardından azalan düzende adlara göre sıralanacak şekilde ayarlar Sort :

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()

Ancak, bir sorgudan oluşturulduktan sonra DataView veya Sort özelliğinin ayarlanmasıyla RowFilter birlikte gelen bir performans kaybı vardır, çünkü DataView filtreleme ve sıralama işlemlerini desteklemek için bir dizin oluşturur. or Sort özelliğini ayarlamak RowFilter verilerin dizinini yeniden oluşturur, uygulamanıza ek yük ekler ve performansı azaltır. Mümkün olduğunda, filtre ve sıralama bilgilerini ilk oluşturduğunuzda DataView belirtmek ve daha sonra değiştirmekten kaçınmak daha iyidir.

Ayrıca bkz.