public static GeoDeptViewModel Recursive(GeoDeptViewModel dept, List <GeoDeptViewModel> deptList, ref List <GeoDeptViewModel> result) { var objects = deptList.Where(c => c.DEPTPARENT == dept.DEPTCODE); if (objects.Count() < 1) { if (string.IsNullOrEmpty(dept.GEOREPORTCD)) { return(null); } return(dept); } else { List <GeoDeptViewModel> newList = new List <GeoDeptViewModel>(); foreach (GeoDeptViewModel ca in objects) { GeoDeptViewModel org = Recursive(ca, deptList, ref result); if (org != null) { if (newList.Where(p => p.DEPTCODE == org.DEPTCODE).FirstOrDefault() == null) { //newList.Add(org); result.Add(org); } } } dept.GeoDeptViewModels = newList; return(dept); } }
public static GeoDeptViewModel GeoRecursive(GeoDeptViewModel org, List <GeoDeptViewModel> list) { var objects = list.Where(c => c.DEPTPARENT == org.DEPTCODE); if (objects.Count() < 1) { return(org); } else { List <GeoDeptViewModel> newList = new List <GeoDeptViewModel>(); foreach (GeoDeptViewModel ca in objects) { GeoDeptViewModel child = GeoRecursive(ca, list); if (child != null) { if (newList.Where(p => p.DEPTCODE == child.DEPTCODE).FirstOrDefault() == null) { newList.Add(child); } } } org.GeoDeptViewModels = newList; return(org); } }
//Version: 1.0 //public static List<GeoDeptViewModel> getTreeGeoDepts() //{ // var data = getGeoDeptReports(); // int count = 0; // List<GeoDeptViewModel> a = new List<GeoDeptViewModel>(); // a = (from e in data // select new GeoDeptViewModel // { // DEPTCODE = e.DEPTCODE, // DEPTNAME = e.DEPTNAME, // DEPTPARENT = e.DEPTPARENT, // SYS_EMPID = e.SYS_EMPID, // isChild = data.Where(obj => obj.DEPTPARENT == e.DEPTCODE).FirstOrDefault() != null, // GEOREPORTCD = e.GEOREPORTCD // }).ToList(); // a.RemoveAll(obj => obj.isChild == false && string.IsNullOrEmpty(obj.GEOREPORTCD)); // while (count < 4) // { // a = (from e in a // select new GeoDeptViewModel // { // DEPTCODE = e.DEPTCODE, // DEPTNAME = e.DEPTNAME, // DEPTPARENT = e.DEPTPARENT, // SYS_EMPID = e.SYS_EMPID, // isChild = a.Where(obj => obj.DEPTPARENT == e.DEPTCODE).FirstOrDefault() != null, // GEOREPORTCD = e.GEOREPORTCD // }).ToList(); // a.RemoveAll(obj => obj.isChild == false && string.IsNullOrEmpty(obj.GEOREPORTCD)); // count++; // } // var result = a.Distinct(new GeoComparer<GeoDeptViewModel>()); // return result.ToList(); //} public static List <GeoDeptViewModel> getTreeGeoDepts(string deptCode) { var data = getGeoDeptReports(); List <GeoDeptViewModel> deptList = new List <GeoDeptViewModel>(); List <GeoDeptViewModel> result = new List <GeoDeptViewModel>(); GeoDeptViewModel org = data.Where(p => p.DEPTPARENT == null || p.DEPTPARENT == string.Empty).FirstOrDefault(); GeoDeptViewModel geo = Recursive(org, data, ref result); if (geo != null) { deptList.Add(geo); result.Add(geo); } return(result); }
//Version 2.0 for improving performance. public static List <GeoDeptViewModel> getTreeGeoDepts() { var geoReports = getGeoDeptReportsRegistered();//Lay all GeoReport. if (geoReports == null || geoReports.Count == 0) { return(new List <GeoDeptViewModel>()); } var data = getGeoDeptReports(); List <GeoDeptViewModel> result = new List <GeoDeptViewModel>(); GeoDeptViewModel root = new GeoDeptViewModel(); foreach (GeoDeptViewModel geo in geoReports) { GeoDeptViewModel geoTemp = geo; geo.isChild = false; while (geoTemp != null && geoTemp.DEPTPARENT != null && !string.IsNullOrEmpty(geoTemp.DEPTPARENT)) { if (result.Where(r => r.DEPTCODE == geoTemp.DEPTCODE).FirstOrDefault() == null) { result.Add(geoTemp); } geoTemp = data.Where(g => g.DEPTCODE == geoTemp.DEPTPARENT).FirstOrDefault(); if (geoTemp != null) { geoTemp.isChild = true; root = geoTemp; } } } if (result.Where(r => r.DEPTCODE == root.DEPTCODE).FirstOrDefault() == null) { result.Add(root); } List <GeoDeptViewModel> finalResult = new List <GeoDeptViewModel>(); GeoDeptViewModel geoRoot = GeoRecursive(root, result); if (geoRoot != null) { finalResult.Add(geoRoot); } return(finalResult); }
//Version 2.0 for improving performance. public static List <GeoDeptViewModel> getGeoDeptReportsRegistered() { List <GeoDeptViewModel> geoReports = new List <GeoDeptViewModel>(); GeoReportAccess access = new GeoReportAccess(); DataTable dtResult = access.GetTreeGeoReportsRegistered(); foreach (DataRow dtr in dtResult.Rows) { GeoDeptViewModel item = new GeoDeptViewModel { GEOREPORTCD = dtr["GEOREPORTCD"].ToString(), DEPTNAME = dtr["DEPTNAME"].ToString(), DEPTCODE = dtr["DEPTCODE"].ToString(), DEPTPARENT = dtr["DEPTPARENT"].ToString() }; geoReports.Add(item); } return(geoReports); }