Azz Falconer
Azz Falconer

Reputation: 44

Tree hierarchy setting flag true if child exists C#

I am trying to set issetting flag to true , if child exists for a parent.

//Class file
 public class EopsModule
 {
         public int ID { get; set; }
         public string ModuleCode { get; set; }
         public string Description { get; set; }
         public bool IsDefaultModule { get; set; }
         public int? ParentID { get; set; }
         public bool IsSetting { get; set; }
         public List<EopsModule> Children { get; set; }
 }

 public IResponseResult GetApplicationSettingWithModule()
 {
    IResponseResult responseResult = new ResponseResult();
    dynamic dynamic = new ExpandoObject();
    try
    {
        var settingsDetails = _databaseManager.GetMultipleDataByJson(DatabaseStoredProcedures.spGetAllApplicationSetting.ToString()).Result;
        var oObjectDeserializeObject = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(settingsDetails);

        //get here all EopsModule in List<EopsModule> 
        var moduleTreeHierarchy = _eopsModuleManager.GetAllEopsModuleWithHierarchy().Result;

        dynamic.settingsDetails = oObjectDeserializeObject;
        dynamic.moduleTreeHierarchy = moduleTreeHierarchy;
        string oModuleCode = string.Empty;
        foreach (var item in oObjectDeserializeObject)
        {
            oModuleCode = item.moduleCode;
            moduleTreeHierarchy.
                Where(x => x.ModuleCode == oModuleCode).ToList().ForEach(x =>
                {
                    x.IsSetting = true;
                });

        }
        responseResult = Helper.Response.ResponseModel(dynamic, true, Helper.Constants.ApiSuccess, HttpStatusCode.OK, true);

    }
    catch (Exception)
    {
        responseResult = Helper.Response.ResponseModel(null, false, Helper.Constants.ApiFailure, HttpStatusCode.BadRequest, true);      
    }
    return responseResult;
}

The loop i am iterating is working for parent level but , its not updating the value for child values, wondering if it can be achieved by recursive function.

Please find the output with existing code :

enter image description here

Upvotes: 1

Views: 113

Answers (1)

Athanasios Kataras
Athanasios Kataras

Reputation: 26362

Have you tried something like this? I did not pass it through compiler but you'll get the idea.

public UpdateModuleAndChildren(Module moduleTreeHierarchy) {
    if(moduleTreeHierarchy.children != null && moduleTreeHierarchy.children.Count() > 0) {
          moduleTreeHierarchy.children.forEach(x => { this.UpdateModuleAndChildren(x) });
          module.IsSetting = true;
    }
} 

Let me know if it helps.

In your code you will just call this.UpdateModuleAndChildren(moduleTreeHierarchy)

Upvotes: 1

Related Questions