2016-07-21 76 views
-1

私はLinq GroupByを使用してグループを作成しています。すべてOKですが、Yearの値でグループ化しようとすると奇妙なエラーが発生します。'g'という名前のローカルまたはパラメータは、そのスコープ内で宣言できません。そのローカルスコープ内でローカルまたはパラメータを定義するために使用されます。

switch (grouping) 
     { 
      case "country": 
       vix = vi.GroupBy(v => v.User.CountryId).Select(g => g.ToList()).ToList(); 
       break; 
      case "province": 
       vix = vi.GroupBy(v => v.User.ProvinceId).Select(g => g.ToList()).ToList(); 
       break; 
      case "city": 
       vix = vi.GroupBy(v => v.User.CityId).Select(g => g.ToList()).ToList(); 
       break; 
      case "region": 
       vix = vi.GroupBy(v => v.User.RegionId).Select(g => g.ToList()).ToList(); 
       break; 
      case "education": 
       vix = vi.GroupBy(v => v.User.EducationId).Select(g => g.ToList()).ToList(); 
       break; 
      case "job": 
       vix = vi.GroupBy(v => v.User.JobId).Select(g => g.ToList()).ToList(); 
       break; 
      case "gender": 
       vix = vi.GroupBy(v => v.User.Gender).Select(g => g.ToList()).ToList(); 
       break; 
      case "age": 
       vix = vi.GroupBy(v => v.User.BirthDate.Value.Year).Select(g => g.ToList()).ToList(); 
       break; 
     } 

これはエラー(エラーが唯一の年齢のためにある最後のGROUPBYのためである)である:

その名前が使用されているので、「G」という名前のローカルまたはパラメータは、このスコープ内で宣言することはできませんローカルまたはパラメータを定義する包括的なスコープ内

+0

これは、あなたのメソッドがこのコードブロックの前のどこかで変数 'g'を使用していることを意味します。このコードブロックを別のメソッドにリファクタリングするか、 'Select(g => g.ToList())'を 'Select(stackoverflow => stackoverflow.ToList()) 'のように変更する必要があります – Cameron

+0

「範囲」とはどういう意味ですか? –

+0

再現性のあるサンプルを提供できますか?また、私たちは何のVSバージョンについて話していますか? –

答えて

2

これはコンパイルできるかどうかを確認できませんが、このようなコードを単純化するとどうなりますか?

IGrouping<TypeOfVi> group; // replace with actual type 
switch (grouping) 
{ 
    case "country": 
     group = vi.GroupBy(v => v.User.CountryId); 
     break; 
    case "province": 
     group = vi.GroupBy(v => v.User.ProvinceId); 
     break; 
    // and so on... 
} 
vix = group.Select(g => g.ToList()).ToList(); 

だけの方法により、コードの繰り返しを軽減、スイッチケースの外にSelectを引っ張ってみてください。

+0

これは私のコードを単純化しますが、エラー –

+0

の助けにはなりません。上のCameronsのコメントをよく読んでください。同じスコープ内にgという別の変数がなければなりません。 – khlr

関連する問題