以查询行政区划为例:
类/方法定义:
/// <summary>
/// 通过传入地区行政区划代码获取该地区父级行政区划名称字符串
/// </summary>
/// <param name="AreaCode">查询地区代码</param>
/// <returns>输入东城区行政区划代码,返回字符串示例:北京-北京市-东城区</returns>
public string GetParentAddress(string AreaCode) {
string address = "";
List<AreaEntity> list = /*自行定义获取地区集合方法*/;
AreaEntity area = list.Find(a => a.AreaCode.Equals(AreaCode));
if (area != null) address = GetParentResult(list, area.AreaCode, area.ParentAreaCode);
return address;
}
/// <summary>
/// 通过传入地区行政区划代码获取该地区子集行政区划名称字符串
/// </summary>
/// <param name="AreaCode">查询地区代码</param>
/// <returns>输入北京行政区划代码,返回字符串示例:北京-北京市-东城区等所有所属北京子集行政区划集合字符串</returns>
public string GetChildAddress(string AreaCode) {
string address = "";
List<AreaEntity> list = /*自行定义获取地区集合方法*/;
address = GetChildResult(list, area.AreaCode);
return address;
}
/// <summary>
/// 通过传入的地区集合和当前地区父级地区代码递归查询改地区父级数据集合
/// </summary>
/// <param name="list">区域List</param>
/// <param name="ParentAreaCode">查询地区父级地区代码</param>
/// <returns></returns>
public List<AreaEntity> GetParentRegion(List<AreaEntity> list, string ParentAreaCode) {
List<AreaEntity> query = (from region in list
where region.AreaCode == ParentAreaCode
select region).ToList();
return query.ToList().Concat(query.ToList().SelectMany(r => GetParentRegion(list, r.ParentAreaCode))).ToList() ;
}
/// <summary>
/// 查询所属地集合结果字符串
/// </summary>
/// <param name="list">地区集合</param>
/// <param name="AreaCode">查询地区代码</param>
/// <param name="ParentAreaCode">查询地区父级地区代码</param>
/// <returns>XXX-XXX-XXX</returns>
public string GetParentResult(List<AreaEntity> list, string AreaCode,string ParentAreaCode)
{
string resultStr = "";
List<AreaEntity> regions = new List<AreaEntity>();
regions.AddRange(list.Where(r => r.AreaCode == AreaCode));
regions.AddRange(GetParentRegion(list, ParentAreaCode));
regions = regions.Count > 1 ? regions.OrderBy(a => Convert.ToInt32(a.AreaCode)).ToList() : regions;
if (regions.Count > 0) {
regions.ForEach(a => {
resultStr += (!string.IsNullOrEmpty(resultStr) ? "-" : "") + a.AreaName ;
});
}
return resultStr;
}
/// <summary>
/// 通过传入的地区集合和当前地区代码递归查询该地区子集级数据集合
/// </summary>
/// <param name="list">区域List</param>
/// <param name="AreaCode">查询地区代码</param>
/// <returns></returns>
public List<AreaEntity> GetChildRegion(List<AreaEntity> list, string AreaCode) {
List<AreaEntity> query = (from region in list
where region.ParentAreaCode== AreaCode
select region).ToList();
return query.ToList().Concat(query.ToList().SelectMany(r => GetChildRegion(list, r.AreaCode))).ToList() ;
}
/// <summary>
/// 查询所属地集合结果字符串
/// </summary>
/// <param name="list">地区集合</param>
/// <param name="AreaCode">查询地区代码</param>
/// <returns>XXX-XXX-XXX</returns>
public string GetChildResult(List<AreaEntity> list, string AreaCode)
{
string resultStr = "";
List<AreaEntity> regions = new List<AreaEntity>();
regions.AddRange(list.Where(r => r.AreaCode == AreaCode));
regions.AddRange(GetChildRegion(list, AreaCode));
regions = regions.Count > 1 ? regions.OrderBy(a => Convert.ToInt32(a.AreaCode)).ToList() : regions;
if (regions.Count > 0) {
regions.ForEach(a => {
resultStr += (!string.IsNullOrEmpty(resultStr) ? "-" : "") + a.AreaName ;
});
}
return resultStr;
}
/// <summary>
/// 区域类
/// </summary>
public class AreaEntity
{
/// <summary>
///
/// </summary>
/// <returns></returns>
public string AreaCode { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public string ParentAreaCode { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public string AreaName { get; set; }
}
调用
void test(){
List<AreaEntity> list = new List<AreaEntity>();
list.Add(new AreaEntity() { AreaCode = "1", ParentAreaCode= "0", Name = "中国" });
list.Add(new AreaEntity() { AreaCode = "2", ParentAreaCode= "1", Name = "北京" });
list.Add(new AreaEntity() { AreaCode = "3", ParentAreaCode= "2", Name = "北京市" });
list.Add(new AreaEntity() { AreaCode = "4", ParentAreaCode= "3", Name = "东城区" });
list.Add(new AreaEntity() { AreaCode = "5", ParentAreaCode= "3", Name = "西城区" });
list.Add(new AreaEntity() { AreaCode = "6", ParentAreaCode= "1", Name = "浙江" });
list.Add(new AreaEntity() { AreaCode = "7", ParentAreaCode= "6", Name = "杭州" });
list.Add(new AreaEntity() { AreaCode = "8", ParentAreaCode= "6", Name = "宁波" });
//通过子节点查询根节点
string resultParent = GetParentAddress("4");//结果:中国-北京-北京市-东城区
//通过根节点查询子节点
string resultChild = GetChildAddress("2");//结果:北京-北京市-东城区-西城区
}