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

これはオプションかもしれません。私は同じ問題を抱えていて、オブジェクトのリストを返すことは解決策ではありませんでした(覚えていない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 に答える
4

LINQ クエリである1 つのList<object>要素を含む新しいを作成します。それはおそらくあなたが望むものではありません。

これにより、LINQ クエリが実行され、結果がリストに変換されます。

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

List<yourAnonymousType>ただし、これにより、 aが のサブタイプではないという問題が生じ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を使用することです。次に、単純に a を返すことができます。TextValueList<YourDataType>

于 2013-10-10T12:29:50.887 に答える
1

返品タイプを から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 に答える