【问题标题】:Display the total number from a sql column in asp.net razor在 asp.net razor 中显示 sql 列的总数
【发布时间】:2015-11-02 15:57:22
【问题描述】:

我认为这很容易找到答案,但是在查看这里、W3Schools 和 asp.net 之后我不知所措。

我想在 cshtml 网站上显示一个 sql 列的添加总数。这是一个慈善活动,人们注册并提供他们将承诺的金额。我基本上想说:

<h2>"Total Raised So Far!"</h2>
<div>sum of the Pledge column from the Players table</div>

我目前正在使用以下代码显示所有注册的人和他们的承诺:

@{
var db = Database.Open("BBBT");
var selectQueryString = "SELECT * FROM Players ORDER BY Team";
}

剪辑

<table>
  <thead>
   <tr>
       <th>Team</th>
       <th>First Name</th>
       <th>Last Name</th>
       <th>Pledge</th>
   </tr>

 @foreach(var row in db.Query(selectQueryString)){
    <tr>
           <td>@row.Team</td>
           <td>@row.FName</td>
           <td>@row.LName</td>
           <td>$@row.Pledge</td>

    </tr>
   }

任何帮助将不胜感激!

【问题讨论】:

    标签: sql asp.net razor sum webmatrix


    【解决方案1】:

    由于您已经获取了所有想要的行,因此最简单的方法是根据查询结果计算总和。所以我会稍微扩展代码。带有总和和箭头的线使用了 Linq 技术。

    @{
        var db = Database.Open("BBBT");
        var selectQueryString = "SELECT * FROM Players ORDER BY Team";
        var results = db.Query( selectQueryString );
        int SumOfPledges = 0;
        SumOfPledges = results.Sum( x => x.Pledge);
    
    }
    

    然后在下面的 html 中,除了循环之外,您所拥有的正是您所拥有的

    @foreach(var row in results){
    

    最后添加您想要的位置,在循环上方或下方,但在代码之后:

    <h1>Total Pledges:   @SumOfPledges</h1>
    

    现在我将 SumOfPledges 设为 int,表示整数,如整数。如果它可以包含小数,您可能需要将其设为双精度或小数。类型需要与数据库中的内容相匹配。

    【讨论】:

    • 诺克斯,谢谢!我收到此错误:异常详细信息:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法将类型'string'隐式转换为'int'......我实际上希望在所有页面上显示它,而不仅仅是一个我在哪里展示整个表格。是否有一种简单的方法可以在其他页面上显示它,或者这只是为了仅在显示整个表格时才起作用?非常感谢!
    • 哎呀,这意味着您的 Pledge 被存储为字符串而不是数字。您应该查看是否可以更改数据库,使 Pledge 是一个数字。他们按照我写的方式,它只适用于显示整个表格的页面。也许最简单的解决方案是复制我的答案中的代码块并放在每一页上。您不必在每一页上都显示表格。使用@vkp 提出的建议有一个更简单的解决方案,但你也必须让它发挥作用。
    • 哦,谢谢!!现在我把它改成 int 就可以了,但它会为每个条目重复。所以它显示了总共 5 次。有办法解决吗? (我很高兴按照您的建议将代码粘贴到每个页面中。)
    • 是的,似乎数据库中的每一行(条目)都会显示总数。它正确地添加了总数(耶!),但根据条目的数量显示了几次。我试过把它放在表格里,把它放在其他页面上,等等,但它仍然在这样做。很近!再次感谢诺克斯。
    • 如果总数出现多次,我怀疑@SumOfPledges 在循环内。将

      Total Pledges: @SumOfPledges

      移动到循环之后页面的最底部,这意味着在最后一个 } 之后。
    【解决方案2】:
    SELECT sum(pledge)
    FROM Players 
    GROUP BY Team
    ORDER BY Team
    

    希望这是你想要做的。

    【讨论】:

    • 谢谢!我对 webmatrix 真的很陌生,更像是一个记事本 ++ 做静态 HTML 的人。所以,我不确定如何使用它。我把它放在@{} 区域,然后用什么在cshtml中显示它?假设我有5个人在玩。每个人在注册时都承诺了 100 美元。因此,我有一个名为 BBBT 的数据库、一个名为 Players 的表和一个名为 Pledge 的列。我想显示 500 美元的运行总额。所以当新人注册时,它会上升。
    • 我不确定。如果和sql有关我可以回答。
    • 好的。谢谢!我很感激!
    猜你喜欢
    • 2016-09-02
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多