using Microsoft.EntityFrameworkCore; using Ropin.Inspection.Model; using Ropin.Inspection.Model.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Repository { public class TbdmProvRepository : RepositoryBase, ITbdmProvRepository { public TbdmProvRepository(InspectionDbContext DbContext) : base(DbContext) { } public async Task> GetProvListTreeAsync() { //var query = from a in DbContext.TBDM_Prov // join b in DbContext.TBDM_City // on a.C_Code equals b.C_ProvCode // join c in DbContext.TBDM_Area // on b.C_Code equals c.C_CityCode // group a by a.C_Code into g // select new TbdmProvViewModel // { // C_Code = g.First().C_Code, // C_Name = g.First().C_Name, // I_Sort = g.First().I_Sort, // C_Status = g.First().C_Status, // //Citys = (from h in b group g by g // // select new TbdmCity // // { // // C_Code = h.First().C_Code, // // C_Name = h.First().C_Name, // // I_Sort = h.First().I_Sort, // // C_Status = h.First().C_Status, // // }).ToList(), // }; //var v = query.ToList(); var Prov = DbContext.TBDM_Prov.ToList(); var City = DbContext.TBDM_City.ToList(); var Area = DbContext.TBDM_Area.ToList(); var treeList = new List(); foreach (var itemProv in Prov.Where(p => p.C_Status == "1")) { TbdmProvViewModel provModel = new TbdmProvViewModel() { C_Code = itemProv.C_Code, C_Name = itemProv.C_Name, I_Sort = itemProv.I_Sort, C_Status = itemProv.C_Status }; provModel.Children = new List(); foreach (var itemCity in City.Where(c => c.C_Status == "1" && c.C_ProvCode == itemProv.C_Code)) { TbdmCity cityModel = new TbdmCity() { C_Code = itemCity.C_Code, C_ProvCode = itemProv.C_Code, C_Name = itemCity.C_Name, I_Sort = itemCity.I_Sort, C_Status = itemCity.C_Status }; provModel.Children.Add(cityModel); cityModel.Children = await RecursionArea(Area, itemCity.C_Code); //cityModel.Areas = new List(); //foreach (var itemArea in Area.Where(a => a.C_Status == "1" && a.C_CityCode == itemCity.C_Code)) //{ // TbdmArea areaModel = new TbdmArea() // { // C_Code = itemArea.C_Code, // C_Name = itemArea.C_Name, // I_Sort = itemArea.I_Sort, // C_Status = itemArea.C_Status // }; // cityModel.Areas.Add(areaModel); //} } treeList.Add(provModel); } return await Task.Run(() => treeList); } async Task> RecursionArea(List Area, string cityCode) { var areaList = new List(); foreach (var itemArea in Area.Where(a => a.C_Status == "1" && a.C_CityCode == cityCode)) { TbdmArea areaModel = new TbdmArea() { C_Code = itemArea.C_Code, C_CityCode = cityCode, C_Name = itemArea.C_Name, I_Sort = itemArea.I_Sort, C_Status = itemArea.C_Status }; areaList.Add(areaModel); } return await Task.Run(() => areaList); } } }