错误:
{“'object'不包含'Id'的定义。”}
视图模型
public class PilotoVM
{
private FormulaEntities1 db = new FormulaEntities1();
public IQueryable<object> calcularValoracion()
{
return db.Piloto.GroupBy(p => p.id).Select(p => new { Id = p.Key, Valoracion = p.Sum( i=> i.agresividad + i.paciencia + i.reflejos + i.valentia + i.valentia)});
}
}
控制器
public ActionResult Index()
{
ViewBag.valoracion = pilotoVM.calcularValoracion();
return View(piloto.ToPagedList(pageNumber, pageSize));
}
查看
@foreach (var pil in ViewBag.valoracion)
{
<p>@pil.Id</p>
<p>@pil.Valoracion</p>
}
pil.Id
答案 0 :(得分:0)
你应该创建一个代表你的Id和Valoracian的强类型对象,或者你可以使用一个元组。
public List<Tuple<int, int>> calcularValoracion()
{
return db.Piloto
.GroupBy(p => p.id)
.Select(p => new Tuple<int, int>(
p.Key,
p.Sum(i => i.agresividad + i.paciencia + i.reflejos + i.valentia + i.valentia))
.ToList();
}
查看
@foreach (var pil in ViewBag.valoracion)
{
@pil.Item1
@pil.Item2
}
请注意查询末尾的.ToList()
。这会将您的查询解析为内存集合,这样您就不会将上下文泄漏到视图中。
最后,C#中的方法名称应该是Pascal Cased,例如CalcularValoracion()
。
答案 1 :(得分:0)
您的方法calcularValoracion()
返回一个匿名对象。匿名类型是内部的,无法在视图中访问(请参阅this article以获得更好的解释)。
而是创建一个视图模型来表示数据
public class PilotoVM
{
public int Id { get; set; }
public int Valoracion { get; set; }
}
然后在控制器中
List<PilotoVM> model = db.Piloto.GroupBy(p => p.id).Select(p => new PilotoVM()
{
Id = p.Key,
Valoracion = p.Sum( i=> i.agresividad + i.paciencia + i.reflejos + i.valentia + i.valentia)
}).ToList();
现在,您可以将强类型模型返回到视图中,并在循环中访问每个PilotoVM
对象的属性。