我正在使用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”的本地或参数,因为该名称用于封闭的本地范围以定义本地或参数
答案 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,这样可以减少代码重复。