为教堂垒球队写一个统计网站。使用LINQ将累积平均值加载到MVC模型
我有一个SQL视图,根据表中的统计数据计算每场比赛的击球平均数。我使用该视图在MVC中构建了一个名为PlayerStats的模型。
我想创建并加载数据到看起来像这样一个模型:
public class BattingAverage
{
[Key]
public int stat_id { get; set; }
public int player_id { get; set; }
public decimal batting_avg { get; set; }
public decimal cumulative_batting_avg { get; set; }
}
在我的控制,我这样做:
var model = (from s in PlayerStats
where s.season_id == sid && s.player_id == pid
orderby s.game_no
select g).AsEnumerable()
.Select(b => new BattingAverage
{
stat_id = b.stat_id,
player_id = b.player_id,
batting_avg = b.batting_avg,
cumulative_batting_avg = ***[[ WHAT TO DO HERE?? ]]***
});
我不知道如何计算累计平均值加载到我的模型中。最终目标是Json.Encode用于AmCharts的模型数据。
更新 - 我尝试这样做:
cumulative_batting_avg = getCumulativeAvg(sid, pid, b.game_no)
我的功能:
public decimal getCumulativeAvg(int season_id, int player_id, int game_no)
{
var averages = PlayerStats.Where(g => g.season_id == season_id && g.player_id == player_id && g.game_no <= game_no).ToArray();
var hits = averages.Select(a => a.Hits).Sum();
var atbats = averages.Select(a => a.AtBats).Sum();
if (atbats == 0)
{
return 0.0m; // m suffix for decimal type
}
else
{
return hits/atbats;
}
}
这在第一行返回正确的平均水平,但随后为休息零。当我在回归中休息时,我发现命中和atbats正在堆积在函数内部,但由于某些原因,avg没有被添加到模型中。我究竟做错了什么?
为了清楚起见,请参阅我对Scott Hannen的评论。 – xgrinderx
如果这是实体框架或LINQ to SQL,则不能调用方法,因为它会尝试将其转换为SQL。但是,如果LINQ到对象,肯定有什么在玩。我在上面包括了第二个例子,说明如何做到这一点......如果函数返回一个对象列表,它可以存储在累积变量中并像第二个例子中那样加入。 –
您是否看到我添加到原始问题的更新?我有一个函数调用有点工作,它似乎是正确计算,但值没有被存储在模型中。我没有看到第二个例子添加到您的评论?道歉,如果我看起来钝,这对我来说都是新的,我正在写这个应用程序来学习MVC和C#来自一个传统的ASP技能。 – xgrinderx