Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует два способа создания DataView в контексте LINQ to DataSet. Вы можете создать DataView из запроса LINQ to DataSet по запросу DataTable или создать его из типизированного или нетипизированного DataTable. В обоих случаях вы создаете DataView, используя один из AsDataView методов расширения; DataView не может быть сконструирован напрямую в контексте LINQ to DataSet.
DataView После создания его можно привязать к элементу управления пользовательского интерфейса в приложении Windows Forms или приложении ASP.NET или изменить параметры фильтрации и сортировки.
DataView создает индекс, который значительно повышает производительность операций, которые могут использовать индекс, например фильтрацию и сортировку. Индекс для объекта DataView создается как при его DataView создании, так и при изменении любой информации о сортировке или фильтрации. DataView Создание и последующая настройка сведений о сортировке или фильтрации приводит к тому, что индекс создается по крайней мере дважды: один раз при создании и вновь при изменении DataView любого из свойств сортировки или фильтрации.
Дополнительные сведения о фильтрации и сортировке с помощью DataView см. в разделах "Фильтрация с помощью DataView" и "Сортировка с помощью DataView".
Создание DataView из запроса LINQ к DataSet-данным
DataView Объект можно создать из результатов запроса LINQ to DataSet, где результаты являются проекцией DataRow объектов. Только что созданный DataView наследует данные фильтрации и сортировки из созданного запроса.
Замечание
В большинстве случаев выражения, используемые для фильтрации и сортировки, не должны иметь побочных эффектов и должны быть детерминированными. Кроме того, выражения не должны содержать логику, зависящую от заданного количества выполнений, так как операции сортировки и фильтрации могут выполняться в любое количество раз.
Создание DataView от запроса, возвращающего анонимные типы или выполняющего операции соединения, не поддерживается.
В запросе поддерживаются только следующие операторы запросов, используемые для создания DataView:
Обратите внимание, что при создании DataView из запроса LINQ to DataSet метод Select должен быть последним вызванным методом в запросе. Это показано в следующем примере, который создает DataView список онлайн-заказов, отсортированный по общей сумме к оплате.
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
Вы также можете использовать строковые свойства RowFilter и Sort для фильтрации и сортировки DataView после его создания из запроса. Обратите внимание, что это очищает данные сортировки и фильтрации, унаследованные от запроса. В следующем примере создается DataView, который выполняет запрос LINQ to DataSet для фильтрации фамилий, начинающихся с "S". Свойство Sort строковое устанавливается для сортировки сначала по фамилиям в порядке возрастания, затем по именам в порядке убывания.
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"
Создание DataView из DataTable
Помимо создания из запроса LINQ to DataSet, объект DataView можно создать из DataTable с помощью метода AsDataView.
В следующем примере создается объект DataView из таблицы SalesOrderDetail и устанавливается как источник данных для объекта BindingSource. Этот объект выступает в качестве прокси-сервера для DataGridView элемента управления.
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()
Для DataView, созданного из DataTable, можно задать фильтрацию и сортировку. Следующий пример создает DataView из таблицы Contact и устанавливает свойство 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()
Однако существует потеря производительности при настройке свойства RowFilter или Sort после того как DataView создан из запроса, так как DataView конструирует индекс для поддержки операций фильтрации и сортировки. Установка свойства RowFilter или Sort перестраивает индекс для данных, добавляя вычислительные затраты на приложение и снижая производительность. По возможности лучше указать сведения о фильтрации и сортировке при первом создании DataView и не изменять их после этого.