LinqDataSource.GroupBy Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define um valor que especifica quais propriedades são usadas para agrupar os dados 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 da propriedade
Uma cadeia de caracteres usada para criar a cláusula Group By.
Exemplos
O exemplo a seguir mostra um controle LinqDataSource que agrupa os dados retornados por uma propriedade chamada Category
. Ele retorna os valores compartilhados e calcula o preço médio dos 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>
O exemplo a seguir mostra um controle LinqDataSource configurado para agrupar por duas colunas. A propriedade Key
faz referência a um objeto que tem duas propriedades, ProductCategory
e Color
. O objeto representado por It
é renomeado Products
. O objeto Products
renomeado contém uma coleção de registros individuais em um agrupamento e cada instância contém todas as colunas da tabela Produtos.
<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>
O exemplo a seguir mostra dois controles ListView para exibir os dados do controle LinqDataSource no exemplo anterior. Um controle ListView exibe os dados agrupados e o outro controle ListView exibe os nomes individuais de produtos que pertencem a esse grupo. A propriedade DataSource do controle associado a dados aninhado é definida como Products
, que é o alias do 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>
Comentários
Você usa a propriedade GroupBy para especificar quais propriedades são usadas para consolidar registros de dados que têm os mesmos valores. Por exemplo, se você definir a propriedade GroupBy como Name
, todos os registros na consulta que têm o mesmo valor de propriedade Name
serão retornados como um único registro consolidado.
Você pode atribuir mais de uma propriedade à propriedade GroupBy colocando todas as propriedades na função new
e separando cada propriedade usando uma vírgula. Por exemplo, para agrupar pelas propriedades Name
e, em seguida, Category
, defina a propriedade GroupBy como new(Name, Category)
.
Os valores na propriedade usada para agrupamento são retornados por meio de uma propriedade gerada chamada Key
. Você inclui a propriedade Key
na propriedade Select para recuperar os valores agrupados. Você pode definir a propriedade Key
para um alias usando a palavra-chave As
, mas não é necessário usar um alias. Por exemplo, você pode definir a propriedade GroupBy como uma propriedade chamada Category
. Você pode recuperar os valores consolidados da propriedade Category
definindo a propriedade Select como new(Key As ProductCategory)
.
Você pode acessar os registros individuais em um agrupamento incluindo a propriedade It
na propriedade Select. A propriedade It
contém uma coleção de registros que compartilham um valor na propriedade agrupada. Você pode iterar pela propriedade It
para recuperar os registros individuais.
A propriedade GroupBy geralmente é usada com métodos de agregação. Você pode usar os seguintes métodos de agregação:
Count()
Average(
)
de colunaSum(
)
de colunaMax(
)
de colunaMin(
)
de colunaWhere(
condição)
Any()
All(
condição)
Para obter mais informações, consulte Visão geral do controle do servidor Web LinqDataSource e Como agrupar e agregar dados usando o controle LinqDataSource.