Чтобы получить родитель-ребенок отношение я использую рекурсии,эффективный способ создания родитель-потомок отношения
public List<MasterDiagnosi> GetAllDiagonsis()
{
IEnumerable<MasterDiagnosi> list = this.GetMasterDiagnosi();
List<MasterDiagnosi> tree = new List<MasterDiagnosi>();
var Nodes = list.Where(x => x.DiagnosisParentID == 0 && x.Status == 2 && x.DiagnosisLanguageID == 2);
foreach (var node in Nodes)
{
SetChildren(node, list);
tree.Add(node);
}
return tree;
}
private void SetChildren(MasterDiagnosi model, IEnumerable<MasterDiagnosi> diagonisList)
{
var childs = diagonisList.Where(x => x.DiagnosisParentID == model.DiagnosisID && x.Status == 2 && x.DiagnosisLanguageID == 2);
if (childs.Count() > 0)
{
foreach (var child in childs)
{
SetChildren(child, diagonisList);
model.MasterDiagnosis.Add(child);
}
}
}
Он отлично подходит для 0-500 записей, но если у меня есть записи более чем 5к или 10k, то я закончил с худшим случаем 4-5 минут обработки. Я ищу другой путь или любую оптимизацию. В настоящее время я сохраняю свой день, используя cahce, но мне нужно, чтобы это выполнялось, поскольку могут выполняться различные операции CRUD. Любая помощь ?
спасибо, что приводит меня к моему решению, я хранить весь объект дерева графа в базе данных сериализации в XML, и вице-стих, таким образом я не нужен, чтобы создать структуру снова и опять. Это дает мне большую гибкость и занимает меньше времени. –