Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hay dos maneras de crear un DataView en el contexto LINQ to DataSet. Se puede crear DataView a partir de una consulta de LINQ to DataSet en DataTable o a partir de DataTable con o sin tipo. En ambos casos, se crea el DataView mediante uno de los métodos de extensión de AsDataView; DataView no se puede construir directamente en el contexto de LINQ to DataSet.
Una vez creado el DataView, se puede enlazar a un control de interfaz de usuario en una aplicación de formularios de Windows Forms o una aplicación de ASP.NET, o cambiar la configuración de filtrado y ordenación.
DataView construye un índice, lo que aumenta significativamente el rendimiento de las operaciones que pueden usar el índice, como el filtrado y la ordenación. El índice para un DataView se construye tanto cuando se crea el DataView como cuando se modifica cualquiera de la información de ordenación o filtrado. DataView Crear y, a continuación, establecer la información de ordenación o filtrado más adelante hace que el índice se cree al menos dos veces: una vez cuando DataView se crea y, de nuevo, cuando se modifica cualquiera de las propiedades de ordenación o filtro.
Para obtener más información sobre el filtrado y la ordenación con DataView, vea Filtrado con DataView y Ordenación con DataView.
Creación de un DataView a partir de una consulta LINQ a DataSet
Se puede crear un DataView objeto a partir de los resultados de una consulta LINQ to DataSet, donde los resultados son una proyección de DataRow objetos. El recién creado DataView hereda la información de filtrado y ordenación de la consulta a partir de la que se crea.
Nota:
En la mayoría de los casos, las expresiones usadas para filtrar y ordenar no deben tener efectos secundarios y deben ser deterministas. Además, las expresiones no deben contener ninguna lógica que dependa de un número establecido de ejecuciones, ya que las operaciones de ordenación y filtrado se pueden ejecutar en cualquier número de veces.
No se admite la creación de a DataView partir de una consulta que devuelve tipos anónimos o consultas que realizan operaciones de combinación.
Solo se admiten los siguientes operadores de consulta en una consulta que se usa para crear DataView:
Tenga en cuenta que cuando se crea un DataView a partir de una consulta LINQ to DataSet, el Select debe ser el método final al que se llama en la consulta. Esto se muestra en el ejemplo siguiente, que crea un DataView de pedidos en línea ordenados por el total adeudado.
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
También puede usar las propiedades basadas en cadenas RowFilter y Sort para filtrar y ordenar un DataView después de haber sido creado a partir de una consulta. Tenga en cuenta que esto borrará la información de ordenación y filtrado heredada de la consulta. En el ejemplo siguiente se crea un objeto DataView a partir de una consulta LINQ a DataSet que filtra por apellidos que comienzan por "S". La propiedad de tipo cadena Sort se establece para ordenar los apellidos en orden ascendente y luego los nombres en orden descendente.
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"
Creación de una vista de datos a partir de una tabla de datos
Además de crearse a partir de una consulta LINQ to DataSet, se puede crear un DataView objeto a partir de un DataTable, utilizando el método AsDataView.
En el ejemplo siguiente se crea un DataView objeto a partir de la tabla SalesOrderDetail y se establece como el origen de datos de un BindingSource objeto . Este objeto actúa como proxy para un DataGridView control .
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()
El filtrado y la ordenación se pueden establecer en el DataView después de que haya sido creado a partir de un DataTable. En el ejemplo siguiente se crea a DataView partir de la tabla Contact y se establece la Sort propiedad para ordenar los apellidos en orden ascendente y, a continuación, los nombres en orden descendente:
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()
Sin embargo, hay una pérdida de rendimiento que ocurre al configurar la propiedad RowFilter o Sort después de que DataView se haya creado a partir de una consulta, porque DataView construye un índice para admitir operaciones de filtrado y ordenación. Al establecer la RowFilter propiedad o Sort se vuelve a generar el índice de los datos, se agrega sobrecarga a la aplicación y se reduce el rendimiento. Cuando sea posible, es mejor especificar la información de filtrado y ordenación al crear el DataView por primera vez y evitar modificarlo después.