2016-07-25 80 views
0

我想通過ProgramId獲取我的所有記錄和組,然後查看它。Asp.Net Foreach和groupby

var userProgramsStats = (from a in db.Statistics where a.UserId == login.GetUserObject().UserId select a) 
       .GroupBy(a => a.ProgramId); 

ViewBag.userProgramsStats = userProgramsStats 

而且在模板:

@foreach (var item in ViewBag.UserProgramsStats) 
{ 
    @item.MoneyRate 
} 

不幸的是我看到這個錯誤:

An unhandled exception has occurred: 'object' does not contain a definition for 'MoneyRate'

我必須把所有記錄其中userid,然後GROUPBY programid,總結一列MoneyRate。然後我想用這樣的:

@item.MoneyRate<br /> // sum MoneyRate 
@item.OthercolumnNormal 

回答

0

你的錯誤是由於錯誤的類型數據item的對象: 當處理的foreach,您的數據的類型無法識別。

您應該指定一個數據模型:

public class UserStat { 

    public double MoneyRate { get; set; } 
    public string ColumnNormal {get; set;} 

    public UserStat() { } 
    public UserStat(double moneyRate, string columnNormal) 
    { 
     MoneyRate = moneyRate; 
     ColumnNormal = columnNormal; 
    } 
} 

然後在你的模板,你應該:

@foreach (UserStat item in ViewBag.UserProgramsStats) 
{ 
    @item.MoneyRate 
} 

你也可以做這樣的事情:

@foreach (dynamic item in ViewBag.UserProgramsStats) 
{ 
    @item.MoneyRate 
} 

使用dynamic關鍵字將在運行時評估屬性是否存在。

+0

謝謝,但是當我做「動態」我沒有看到任何錯誤,但記錄了太.. 我的查詢: VAR userProgramsStats =(從在db.Statistics其中a.UserId == login.GetUserObject() .UserId選擇a) .GroupBy(a => a.ProgramId).ToList(); – ZiomekZKadwencji

+0

對不起。我的不好 - 同樣的錯誤。 – ZiomekZKadwencji

0

您正在收到類型錯誤,因爲userProgramsStats的類型不包含屬性MoneyRate。

你說你想總結MoneyRate列,要做到這一點,你需要將分組結果投影到一個新類型。

以您現有的查詢爲例,我在其末尾添加了一條選擇語句,將項目放入一個新的匿名類型programId和每個programId的MoneyRate列的總和。

var result = (from a in db.Statistics where a.UserId login.GetUserObject().UserId select a) 
       .GroupBy(a => a.programid) 
       .Select(group => new { MoneyRateSum = group.Sum(i => i.MoneyRate), ProgramId = group.Key }); 

有關投影和匿名類型的更多信息,請參閱https://msdn.microsoft.com/en-us/library/bb397914.aspx

+0

相同的錯誤..發生未處理的異常:'object'不包含'MoneyRateSum'的定義 – ZiomekZKadwencji

+0

如果包含上面的投影,以及上面建議的視圖模板中的動態類型,那麼該怎麼辦? '@foreach(ViewBag.UserProgramsStats中的動態項目) { @ item.MoneyRateSum } –