无法在此范围内声明名为“g”的本地或参数,因为该名称用于封闭的本地范围以定义本地或参数

时间:2016-07-21 17:39:54

标签: c# linq group-by

我正在使用Linq GroupBy从我的结果中制作组。它对所有人都没问题,但是当我尝试按日期时间的Year分组时,我收到一个奇怪的错误。

   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”的本地或参数,因为该名称用于封闭的本地范围以定义本地或参数

1 个答案:

答案 0 :(得分: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拉出switch-case,这样可以减少代码重复。