一个名为';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"的本地或参数,因为该名称在封闭的本地作用域中用于定义本地或参数
现在我无法验证它是否编译;-)但是,像这样简化代码呢?
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
从开关盒中拔出来,顺便说一句,这样可以减少代码重复。