如何在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();
}
}
}
}
如果您想要平均值值(或平均值),这很简单:
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();
}
}