4

我有一个 gridview,它使用EntityDataSource. 我仅使用 db 中与 where 子句相对应的项目填充 gridview。

FRUIT       COLOR   NUMB.SEEDS
ORANGE      ORANGE  3
APPLE       RED     4
ORANGE      ORANGE  2
STRAWBERRY  RED     0

我想要的是对 NUMB.SEEDS 的相似行求和,如下所示:

FRUIT       COLOR   NUMB.SEEDS
ORANGE      ORANGE  5
APPLE       RED     4
STRAWBERRY  RED     0

请给点提示?我不知道从哪里开始。

这是我放置 where 子句的地方:

<asp:EntityDataSource ID="MyEfDataSource"
    runat="server" ContextTypeName="MyContext"
    EntitySetName="Fruits" EntityTypeFilter="Fruit"
    AutoPage="true" AutoSort="true" Where="it.idName = @idName">
    <WhereParameters>
        <asp:ControlParameter ControlID="ddlFruit" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" Name="idName" />
    </WhereParameters>
    </asp:EntityDataSource>
4

2 回答 2

1

在 SQL 中,您将使用GROUP BY子句。我认为这应该适用于EntityDataSource

<asp:EntityDataSource ID="MyEfDataSource"
    runat="server" ContextTypeName="MyContext"
    EntitySetName="Fruits" EntityTypeFilter="Fruit"
    AutoPage="true" AutoSort="true" 
    Select="it.FRUIT, it.COLOR, SUM(it.[NUMB.SEEDS])"
    Where="it.idName = @idName"
    GroupBy"it.FRUIT, it.COLOR" >
    <WhereParameters>
        <asp:ControlParameter ControlID="ddlFruit" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" Name="idName" />
    </WhereParameters>
    </asp:EntityDataSource>

请注意,我根据您在问题中输入的列在“选择”和“位置”表达式中调用您的字段。它们在您的实际数据源中可能有所不同。

于 2013-03-01T13:58:50.660 回答
1

您可以使用该QueryCreated事件。

<asp:EntityDataSource ID="EntityDataSource1" runat="server" 
    ConnectionString="name=AdventureWorksEntities" 
    DefaultContainerName="AdventureWorksEntities" EnableFlattening="False" 
    EntitySetName="FRUITS" 
    onquerycreated="EntityDataSource1_QueryCreated">
</asp:EntityDataSource>

protected void EntityDataSource1_QueryCreated(object sender, QueryCreatedEventArgs e)
{
    var fruits = e.Query.Cast<Fruits>();
    e.Query = fruits.GroupBy(fruit => fruit.COLOR)
                     .Select(group => new { FRUIT, COLOR,   group.Sum(fruit => fruit.SEEDS)});;  
}

请参阅:将 LINQ 查询应用于 EntityDataSource

于 2013-03-01T13:59:44.120 回答