4

我需要在 List 中获得以下输出,我使用的是 MVC4 和 C#。基本上我需要执行的查询是:

SELECT ESTADO, COUNT(*)
FROM VISITAS
WHERE CICLOID=ID
GROUP BY ESTADO;

为了实现这一点,我在我的存储库中编写了以下过程:

  public List<object> PorcentajeVisitasCiclo(Guid id)
  {
      return new List<object> {_context.Visitas
          .Where(a => a.CicloId == id)
          .GroupBy(a => a.Estado)
          .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() })};
  }

你能指出我哪里出错了吗?它没有给出任何编译错误,但是它没有返回任何东西

预先感谢

4

4 回答 4

4

您创建一个List<object>包含一个元素的新元素,即您的 LINQ 查询。这可能不是你想要的。

这将执行您的 LINQ 查询,然后将结果转换为列表:

return _context.Visitas.Where(a => a.CicloId == id)
    .GroupBy(a => a.Estado)
    .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() }).ToList();

但是,这会产生 aList<yourAnonymousType>不是 的子类型的问题List<object>。因此,您需要先将匿名类型转换为对象:

return _context.Visitas.Where(a => a.CicloId == id)
    .GroupBy(a => a.Estado)
    .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() })
    .Cast<object>().ToList();

当然,更好的解决方案是删除匿名类型并使用具有字段/属性的显式YourDataType类。然后你可以简单地返回一个.TextValueList<YourDataType>

于 2013-10-10T12:29:50.887 回答
4

这可能是一种选择。我有同样的问题,返回一个对象列表不是解决方案(一些 LINQ 错误我不记得了)。我寻求更简单的解决方案。

public List<DummyModel> Method(int id)
    {
        return _context.Visitas.Where(a => a.CicloId == id).GroupBy(a => a.Estado).
            Select(n => new DummyModel { Name = n.Key.Descripcion, Value = n.Count() }).ToList();
    }
于 2013-10-10T22:05:29.800 回答
1

您可以将 Your return type 从 更改List<object>IEnumerable

顺便说一句,List<object>等于List

您可以在您的查询上调用ToList()扩展方法并返回对象列表。但这将强制查询立即执行,并且您将来将无法使用yield return。如果您的查询返回大量数据,这很糟糕。当您调用时,所有数据都将加载到内存中ToList()

于 2013-10-10T12:31:40.537 回答
1
return (_context.Visitas.Where(a => a.CicloId == id)
    .GroupBy(a => a.Estado)
    .Select(n => new { Text = n.Key , Value = n.Count() })).Cast<object>().ToList();
于 2013-10-10T12:33:13.833 回答