爲教堂壘球隊寫一個統計網站。使用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