如何在ASP.NET中通过c#获取数据库中某列的平均值

本文关键字:数据库 获取 平均值 ASP NET | 更新日期: 2023-09-27 18:16:24

我是c#新手,在ASP工作。. NET,我应该从我在Visual Studio中连接的本地数据库中的表中获得所有信息。我只知道如何连接以及如何在网格视图中获取整个表,但我会在网格视图的最后,或可能以其他方式显示每列的中间值。

这是一项基于单选按钮的调查的答案,值为1到5。所以我想从每个问题中得到媒介。在我的数据库中,我只有一列id和一列每个问题。

现在我有这个:

result.aspx:

中的代码
<asp:GridView ID="grdResult" CssClass="grid" runat="server">
</asp:GridView>

result.aspx.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Uppgift_3
{
 public partial class result : System.Web.UI.Page
 {
    protected void Page_Load(object sender, EventArgs e)
    {
        using (resultatEntities datakoppling = new resultatEntities()) 
        {
            var answers = from survey in datakoppling.surveyAnswers
                          select survey;
            grdResult.DataSource = answers;
            grdResult.DataBind();
        }
    }
 }
}

当我在default.aspx中将东西放入数据库时:

    protected void saveSurvey_Click(object sender, EventArgs e)
    {
        using (resultatEntities datakoppling = new resultatEntities())
        {
            var saveSurvey = new surveyAnswers();
            saveSurvey.Question1 = RadioButtonQuestion1.SelectedItem.ToString();
            saveSurvey.Question2 = RadioButtonQuestion2.SelectedItem.ToString();
            saveSurvey.Question3 = RadioButtonQuestion3.SelectedItem.ToString();
            saveSurvey.Question4 = RadioButtonQuestion4.SelectedItem.ToString();
            saveSurvey.Question5 = RadioButtonQuestion5.SelectedItem.ToString();
            saveSurvey.Question6 = RadioButtonQuestion6.SelectedItem.ToString();
            saveSurvey.Question7 = RadioButtonQuestion7.SelectedItem.ToString();
            saveSurvey.Question8 = RadioButtonQuestion8.SelectedItem.ToString();
            saveSurvey.Question9 = RadioButtonQuestion9.SelectedItem.ToString();
            saveSurvey.Question10 = RadioButtonQuestion10.SelectedItem.ToString();
            datakoppling.surveyAnswers.AddObject(saveSurvey);
            datakoppling.SaveChanges();
        }
    }
}
}

如何在ASP.NET中通过c#获取数据库中某列的平均值

如果您想要平均值值(或平均值),这很简单:

var mean = datakoppling.surveyAnswers.Average(s => s.Value);

如果你想要中位数值(集合中一半的值在上面,一半的值在下面),这需要更多的工作,但你仍然可以这样做。试试这个:

var count = datakoppling.surveyAnswers.Count();
var midPoint = count / 2;
double medianValue;
if (count % 2 = 0)
{
    medianValue = datakoppling.surveyAnswers
                              .OrderBy(s => s.Value)
                              .Take(midPoint + 1)
                              .Skip(midPoint - 1)
                              .Average(s => s.Value);
}
else
{
    medianValue = datakoppling.surveyAnswers
                              .OrderBy(s => s.Value)
                              .Select(s => s.Value)
                              .Take(midPoint + 1)
                              .Last();
}

这里我假设属性Value是你想要平均的,当然你可以根据需要调整这段代码来适应你的特殊情况。


:
作为旁注,您可以使用像这样的单个查询计算多个平均值:

var averages = 
    from s in datakoppling.surveyAnswers
    group s by 0 into g
    select new 
    {
        Value1 = g.Average(s => s.Value1),
        Value2 = g.Average(s => s.Value2),
        Value3 = g.Average(s => s.Value3),
        ...
    };

要使用它来将数据绑定到你的网格,只需执行:

protected void Page_Load(object sender, EventArgs e)
{
    using (resultatEntities datakoppling = new resultatEntities()) 
    {
        var averages = 
            from s in datakoppling.surveyAnswers
            group s by 0 into g
            select new 
            {
                question1 = g.Average(s => s.question1),
                question2 = g.Average(s => s.question2),
                question3 = g.Average(s => s.question3),
                ...
            };
        grdResult.DataSource = averages;
        grdResult.DataBind();
    }
}

如果您想要答案和网格中的平均值使用:

protected void Page_Load(object sender, EventArgs e)
{
    using (resultatEntities datakoppling = new resultatEntities()) 
    {
        var answers = 
            from s in datakoppling.surveyAnswers
            select new 
            {
                id = s.Id,
                question1 = (double)s.question1,
                question2 = (double)s.question2,
                question3 = (double)s.question3,
                ...
            };
        var averages = 
            from s in datakoppling.surveyAnswers
            group s by 0 into g
            select 
            {
                id = 0,
                question1 = g.Average(s => s.question1),
                question2 = g.Average(s => s.question2),
                question3 = g.Average(s => s.question3),
                ...
            };
        grdResult.DataSource = answers.Union(averages);
        grdResult.DataBind();
    }
}