2013-10-10 13 views
16

:ラムダ式に私は次のクエリ変換しようとしていますによってグループ、カウントおよびラムダ式

SELECT STATE, COUNT(*) 
FROM MYTABLE 
GROUP BY STATE; 

を。私はC#とEntityFrameworkを使用していますが、動作させることはできません。それは、コンパイルのdoesntもちろん

public IEnumerable<object> PorcentajeState(Guid id) 
{ 
    return _context.Sates.Where(a => a.Id == id) 
         .GroupBy(a => a.State) 
         .Select(n => new { n.StateId , n.Count() }); 
} 

と私は2時間のグーグル後に失われています:ここでは、私がこれまでの私のレポジトリに持っているものです。手伝っていただけませんか?事前に

おかげ

+1

コンパイルエラーが表示されますか? –

答えて

36

2つの問題がここにあります

  1. GroupBy意志の結果はタイプIEnumerable<IGrouping<TKey, TSource>>の列挙になります。 IGroupingインターフェイスには、GroupBy式で指定したキーであるKeyという1つのプロパティしかありません。結果に他のLinq演算を行うことができるようにIEnumerable<T>を実装しています。
  2. プロパティまたはフィールド式から推論できない匿名型のプロパティ名を指定する必要があります。この場合、IGroupingにはCountが呼び出されているため、そのプロパティの名前を指定する必要があります。

この試してみてください:あなたはStateId代わりのKey、ちょうど変更と命名された最初のプロパティをしたい場合は、いずれの場合も

public IEnumerable<object> PorcentajeState(Guid id) 
{ 
    return from a in _context.Sates 
      where a.Id == id 
      group a by a.StateId into g 
      select new { a.Key, Count = g.Count() }; 
} 

だろうクエリ構文で

public IEnumerable<object> PorcentajeState(Guid id) 
{ 
    return _context.Sates.Where(a => a.Id == id) 
         .GroupBy(a => a.StateId) 
         .Select(g => new { g.Key, Count = g.Count() }); 
} 

同等のthat to

new { StateId = g.Key, Count = g.Count() } 
+0

ありがとう!だから、g.Key.Field(私の場合、状態)です。正しい? – N8K8

+0

@ user2865100私はあなたが 'State'か' StateId'でグループ化したいのか少し混乱します。彼らは同じ分野(ちょうどタイプミス)であるはずですか?そうでない場合は、どうやってお互いに関係していますか? –

+0

私は実際にそれを私の元のコードから少し隠していたので、おそらくタイプミス。申し訳ありません。 状態は説明なので、Where句に一致するすべての説明の数を取得する必要があります。これを使用してPieChartを「フィード」するには、これが必要です。http://blog.platformular.com/2012/03/20/load-google-chart-by-ajax-using-asp-net-mvc-and- jquery /。 このコードは私のリポジトリにあり、今すぐあなたの助けを借りてコンパイルします。ありがとう!私は今コントローラーで立ち往生していますが、私はこれを修正したので今見てみる必要があります。 – N8K8

1

これは良いです

public IEnumerable<object> PorcentajeState(Guid id) 
    { 
     return _context.Sates.Where(a => a.Id == id) 
          .GroupBy(a => a.StateId) 
          .Select(g => new { g.Key, Count = g.Count() }); 
    } 

しかしこれを試してみてください。

public IEnumerable<object> PorcentajeState(Guid id) 
     { 
      return _context.Sates.Where(a => a.Id == id) 
           .GroupBy(a => a.StateId) 
           .Select(g => new { g.Key.StateId, Count = g.Count() }); 
     } 
関連する問題