递归函数-如何在具有多个级别的类中仅提取具有特定值的子级
本文关键字:提取 递归函数 | 更新日期: 2023-09-27 18:30:10
我有一个属性为RegionType的Region类。RegionType可以是"country"、"multi-city"、"city"、"neighbor"等。在任何给定的地区,我都想提取所有的社区,所以在泰国,我希望得到曼谷、苏梅岛等。因为它们是城市,我需要进入另一个层次——我如何递归地做到这一点?我尝试创建如下的递归静态方法:
public static List<Region> GetNeighborhoods(this Region region, ref List<Region> neighborhoods)
{
var ctx = new DalContext();
if (region.RegionType == "Country" ||
region.RegionType == "Multi-Region (within a country)" ||
region.RegionType == "City" ||
region.RegionType == "Multi-City (Vicinity)" ||
region.RegionType == "Province (State)" ||
region.RegionType == "Multi-Region (within a country)")
{
IEnumerable<Region> childrens = region.GetChildren();
if (childrens.Any())
{
foreach (var child in childrens)
{
return GetNeighborhoods(child, ref neighborhoods);
}
}
}
else
{
neighborhoods.AddRange(ctx.Regions
.Where(r => r.ParentRegionId == region.ParentRegionId
&& r.RegionType == "Neighborhood"
&& r.RegionNameLong.Contains(region.RegionName)
&& r.Id != region.Id).ToList());
}
return neighborhoods;
}
ctx是我所有区域的数据库实例。在跑步结束时,我在邻居列表中得到了0个区域。帮助
您最好将其转换为返回IEnumerable<Region>
的方法。
如果没有你所有类的定义,我就无法检查它的有效性,但沿着以下几条线应该可以工作:
public static IEnumerable<Region> GetNeighborhoods(Region region)
{
if
(
region.RegionType == "Country" ||
region.RegionType == "Multi-Region (within a country)" ||
region.RegionType == "City" ||
region.RegionType == "Multi-City (Vicinity)" ||
region.RegionType == "Province (State)" ||
region.RegionType == "Multi-Region (within a country)"
)
{
foreach (var child in region.GetChildren())
foreach (var region in GetNeighborhoods(child))
yield return region;
}
else
{
var ctx = new DalContext();
var matchingRegions = ctx.Regions.Where(r =>
r.ParentRegionId == region.ParentRegionId &&
r.RegionType == "Neighborhood" &&
r.RegionNameLong.Contains(region.RegionName) &&
r.Id != region.Id
);
foreach (var region in matchingRegions)
yield return region;
}
}
然而,我不知道DalContext()
在做什么,所以它可能在这方面完全失败。。。