我有一个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>
答案 0 :(得分:1)
,您将使用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>
请注意,我根据您在问题中添加的列,在“选择”和“位置”表达式中调用字段。它们在您的实际数据源中可能有所不同。
答案 1 :(得分: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)});;
}