【问题标题】:object doesn´t contain a definition for Id对象不包含 Id 的定义
【发布时间】:2015-06-04 18:49:07
【问题描述】:

错误:

{"'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 中的错误

【问题讨论】:

  • 您将匿名类型列表返回给IQueryable&lt;object&gt;。那只是自找麻烦。您应该解析为强类型对象的集合。
  • 返回 IQueryable 给你的控制器不是个好主意,最好返回一个模型stackoverflow.com/questions/2215057/…

标签: c# linq asp.net-mvc-5


【解决方案1】:

您的方法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 对象的属性。

【讨论】:

    【解决方案2】:

    您应该创建一个表示您的 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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2015-11-27
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多