我想通过ProgramId
获取所有记录和分组,然后查看此内容。
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
}
不幸的是我看到了这个错误:
发生了未处理的异常:'object'不包含'MoneyRate'的定义
我必须获取所有记录,其中userid,然后groupby programid
并将一列MoneyRate
相加。然后我想要这样使用:
@item.MoneyRate<br /> // sum MoneyRate
@item.OthercolumnNormal
答案 0 :(得分: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
关键字将评估属性是否在运行时存在。
答案 1 :(得分:0)
您收到类型错误,因为userProgramsStats的类型不包含属性MoneyRate。
你说你要总结MoneyRate列,为此你需要将分组结果投影到一个新类型。
采用现有的查询,我在其末尾添加了一个select语句,该语句投射到一个新的匿名类型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。