一个名为';g';不能在此作用域中声明,因为该名称在封闭的本地作用域中用于定义本地或参数

本文关键字:作用域 用于 参数 定义 因为 一个 不能 声明 | 更新日期: 2023-09-27 17:58:16

我正在使用Linq GroupBy根据我的结果进行分组。所有这些都可以,但当我尝试按DateTime的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"的本地或参数,因为该名称在封闭的本地作用域中用于定义本地或参数

一个名为';g';不能在此作用域中声明,因为该名称在封闭的本地作用域中用于定义本地或参数

现在我无法验证它是否编译;-)但是,像这样简化代码呢?

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从开关盒中拔出来,顺便说一句,这样可以减少代码重复。