Compartir vía


LinqDataSource.GroupBy Propiedad

Definición

Obtiene o establece un valor que especifica qué propiedades se usan para agrupar los datos recuperados.

public:
 property System::String ^ GroupBy { System::String ^ get(); void set(System::String ^ value); };
public string GroupBy { get; set; }
member this.GroupBy : string with get, set
Public Property GroupBy As String

Valor de propiedad

Cadena que se usa para crear la cláusula Group By.

Ejemplos

En el ejemplo siguiente se muestra un control LinqDataSource que agrupa los datos devueltos por una propiedad denominada Category. Devuelve los valores compartidos y calcula el precio medio de los registros agrupados.

<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    GroupBy="Category"
    Select="new(Key as ProductCategory, 
            Average(Price) as AvePrice)"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:GridView 
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:GridView>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    GroupBy="Category"
    Select="new(Key as ProductCategory, 
            Average(Price) as AvePrice)"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:GridView 
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:GridView>

En el ejemplo siguiente se muestra un control LinqDataSource que está configurado para agrupar por dos columnas. La propiedad Key hace referencia a un objeto que tiene dos propiedades, ProductCategory y Color. Se cambia el nombre del objeto representado por ItProducts. El objeto Products cuyo nombre ha cambiado contiene una colección de los registros individuales de una agrupación y cada instancia contiene todas las columnas de la tabla Products.

<asp:LinqDataSource 
  ContextTypeName="ExampleDataContext" 
  TableName="Products" 
  GroupBy="new(ProductCategory, Color)"
  Select="new(Key,
          It As Products,
          Max(ListPrice) As MaxListPrice, 
          Min(ListPrice) As MinListPrice)"
  ID="LinqDataSource1" 
  runat="server">
</asp:LinqDataSource>
<asp:LinqDataSource 
  ContextTypeName="ExampleDataContext" 
  TableName="Products" 
  GroupBy="new(ProductCategory, Color)"
  Select="new(Key,
          It As Products,
          Max(ListPrice) As MaxListPrice, 
          Min(ListPrice) As MinListPrice)"
  ID="LinqDataSource1" 
  runat="server">
</asp:LinqDataSource>

En el ejemplo siguiente se muestran dos controles ListView para mostrar los datos del control LinqDataSource en el ejemplo anterior. Un control ListView muestra los datos agrupados y el otro control ListView muestra los nombres individuales de productos que pertenecen a ese grupo. La propiedad DataSource del control enlazado a datos anidada se establece en Products, que es el alias del objeto It.

<asp:ListView 
    DataSourceID="LinqDataSource1" 
    ID="ListView1" runat="server">

    <LayoutTemplate>
      <table id="Table1" 
          style="background-color:Teal;color:White" 
          runat="server" 
          class="Layout">
          
        <thead>
          <tr>
            <th><b>Product Category</b></th>
            <th><b>Color</b></th>
            <th><b>Highest Price</b></th>
            <th><b>Lowest Price</b></th>
          </tr>
        </thead>
        <tr runat="server" id="itemPlaceholder">
        </tr>
        
      </table>
    </LayoutTemplate>

    <ItemTemplate>
      <tr>
        <td><%# Eval("key.ProductCategory") %></td>
        <td><%# Eval("key.Color") %></td>
        <td><%# Eval("MaxListPrice") %></td>
        <td><%# Eval("MinListPrice") %></td>
      </tr>
      <tr>
        
        <td colspan="4" style="width:100%;background-color:White;color:Black">
          <asp:ListView 
            DataSource='<%# Eval("Products") %>' 
            runat="server" 
            ID="ListView2">

            <LayoutTemplate>
              <div runat="server" id="itemPlaceholder" />
            </LayoutTemplate>

            <ItemTemplate>
              <%# Eval("ProductName") %><br />
            </ItemTemplate>

          </asp:ListView> 
        </td>
      </tr>
    </ItemTemplate>
  </asp:ListView>
<asp:ListView 
   DataSourceID="LinqDataSource1" 
   ID="ListView1" runat="server">

   <LayoutTemplate>
     <table id="Table1" 
         style="background-color:Teal;color:White" 
         runat="server" 
         class="Layout">
         
       <thead>
         <tr>
           <th><b>Product Category</b></th>
           <th><b>Color</b></th>
           <th><b>Highest Price</b></th>
           <th><b>Lowest Price</b></th>
         </tr>
       </thead>
       <tr runat="server" id="itemPlaceholder">
       </tr>
       
     </table>
   </LayoutTemplate>

   <ItemTemplate>
     <tr>
       <td><%# Eval("key.ProductCategory") %></td>
       <td><%# Eval("key.Color") %></td>
       <td><%# Eval("MaxListPrice") %></td>
       <td><%# Eval("MinListPrice") %></td>
     </tr>
     <tr>
       
       <td colspan="4" style="width:100%;background-color:White;color:Black">
         <asp:ListView 
           DataSource='<%# Eval("Products") %>' 
           runat="server" 
           ID="ListView2">

           <LayoutTemplate>
             <div runat="server" id="itemPlaceholder" />
           </LayoutTemplate>

           <ItemTemplate>
             <%# Eval("ProductName") %><br />
           </ItemTemplate>

         </asp:ListView> 
       </td>
     </tr>
   </ItemTemplate>
 </asp:ListView>

Comentarios

Use la propiedad GroupBy para especificar qué propiedades se usan para consolidar los registros de datos que tienen los mismos valores. Por ejemplo, si establece la propiedad GroupBy en Name, todos los registros de la consulta que tienen el mismo valor de propiedad Name se devuelven como un único registro consolidado.

Puede asignar más de una propiedad a la propiedad GroupBy si incluye todas las propiedades de la función new y separa cada propiedad mediante una coma. Por ejemplo, para agrupar por las propiedades Name y, a continuación, Category, establezca la propiedad GroupBy en new(Name, Category).

Los valores de la propiedad que se usan para la agrupación se devuelven a través de una propiedad generada denominada Key. La propiedad Key se incluye en la propiedad Select para recuperar los valores agrupados. Puede establecer la propiedad Key en un alias mediante la palabra clave As, pero no es necesario usar un alias. Por ejemplo, puede establecer la propiedad GroupBy en una propiedad denominada Category. Puede recuperar los valores consolidados de la propiedad Category estableciendo la propiedad Select en new(Key As ProductCategory).

Puede acceder a los registros individuales de una agrupación mediante la inclusión de la propiedad It en la propiedad Select. La propiedad It contiene una colección de registros que comparten un valor en la propiedad agrupada. Puede iterar en la propiedad It para recuperar los registros individuales.

La propiedad GroupBy se usa a menudo con métodos de agregación. Puede usar los métodos agregados siguientes:

  • Count()

  • de columna de

  • de columna de

  • de columna de

  • de columna de

  • Where( ) de condición

  • Any()

  • All( ) de condición

Para obtener más información, vea Información general del control de servidor web LinqDataSource y Cómo: Agrupar y agregar datos mediante el control LinqDataSource.

Se aplica a