lunes, 6 de enero de 2014

AGRUPAR Y AGREGAR DATOS UTILIZANDO LINQDATASOURCE

El control LinqDataSource permite agrupar datos de un origen de datos según una o varias columnas de datos. Los registros se agrupan por una columna si se desea recuperar información sobre todos los registros de un origen de datos que comparten un valor en la columna agrupada. Con frecuencia, usa funciones de agregado en datos agrupados para calcular valores como la suma, la media o el recuento.

Para definir las columnas de datos que se usan para agrupar los datos, se establece la propiedad GroupBy del control LinqDataSource. Si desea usar las funciones de agregado, también especifica un valor para que la propiedad Select defina las funciones de agregado.


Puede agrupar datos basándose en una columna única si especifica dicha columna en la propiedad GroupBy.

Para agrupar y agregar por una columna

  1. Establezca la propiedad ContextTypeName del control LinqDataSource en un origen de datos.
  2. Establezca la propiedad TableName en la propiedad del objeto de origen de datos que contiene los datos que desea agrupar.
  3. Establezca la propiedad GroupBy en la columna que desea usar para agrupar los datos.
  4. Establezca la propiedad Select para incluir una función de agregado y la columna que se usa para agrupar los datos.
    La propiedad que se especifica en la propiedad GroupBy se recupera a través de un objeto denominado Key. Debe asignar nombres (alias) a las funciones de agregado con la palabra clave As, de forma que un control enlazado a datos pueda hacer referencia a la propiedad creada por la función de agregado. El objetoLinqDataSourceView inicia una excepción si una función de agregado no tiene nombre.
    El ejemplo siguiente muestra un control LinqDataSource que usa una columna denominada ProductCategory para agrupar datos y muestra los resultados con un control GridView. Selecciona los valores de ProductCategory mediante la propiedad Key. A continuación, calcula la media de las propiedades ListPrice y Cost de los productos con el mismo valor en ProductCategory. También devuelve un recuento del número de registros para cada valor de ProductCategory.
    <asp:LinqDataSource 
      ContextTypeName="ExampleDataContext" 
      TableName="Products" 
      GroupBy="ProductCategory"
      Select="new(Key, 
        Average(ListPrice) As AverageListPrice, 
        Average(Cost) As AverageCost, 
        Count() As RecordCount)"
      ID="LinqDataSource1" 
      runat="server">
    </asp:LinqDataSource>
    <asp:GridView 
      DataSourceID="LinqDataSource1" 
      ID="GridView1" 
      runat="server">
    </asp:GridView>
    

Para agrupar datos en función de varias columnas, debe usar la función new al establecer la propiedad GroupBy.

Para agrupar por varias columnas

  1. Establezca las propiedades ContextTypeName y TableName tal como se describe en el procedimiento anterior.
  2. Establezca la propiedad GroupBy con sintaxis como new(column1, column2), donde column1 y column2 son los nombres de las columnas que desea usar para agrupar los datos. Puede proporcionar tantas columnas como sea necesario.
  3. Establezca la propiedad Select para incluir la propiedad Key y cualquier función de agregado que necesite.
    El ejemplo siguiente muestra un control LinqDataSource configurado para agrupar por dos columnas y que muestra el resultado en un control DataList. El objetoKey contiene dos propiedades, ProductCategory y Color.
    <asp:LinqDataSource 
      ContextTypeName="ExampleDataContext" 
      TableName="Products" 
      GroupBy="new(ProductCategory,Color)"
      Select="new(Key,
        Average(ListPrice) as AverageListPrice, 
        Count() as RecordCount)"
      ID="LinqDataSource1" 
      runat="server">
    </asp:LinqDataSource>
    <asp:DataList 
      DataSourceID="LinqDataSource1" 
      ID="DataList1" 
      runat="server">
      <ItemTemplate>
        <%# Eval("Key.ProductCategory") %> 
        <%# Eval("Key.Color") %> 
        <%# Eval("AverageListPrice") %> 
        <%# Eval("RecordCount") %> 
      </ItemTemplate>
    </asp:DataList>

No hay comentarios:

Publicar un comentario