static void GetChildCategory(CategoryTree tree, List <string> categories, List <GroupPackage> groups) { DCT.Execute(data => { categories.Add(tree.Name); if (tree.Children != null && tree.Children.Count == 0) { var group = new GroupPackage(categories.ToArray()); groups.Add(group); categories.Remove(tree.Name); return; } foreach (var c in tree.Children) { GetChildCategory(c, categories, groups); } categories.Remove(tree.Name); }); }
///------------------------------------------------------------------------------------------------- /// <summary> Получаем пакет группы с полям </summary> /// /// <remarks> SV Milovanov, 02.02.2018. </remarks> /// /// <param name="hash"> Хэш группы </param> /// /// <returns> Пакет группы (сигнатура + словарь полей) </returns> ///------------------------------------------------------------------------------------------------- public override GroupPackage GetGroupPackage(string hash) { GroupPackage result = null; DCT.Execute(data => { var dbGroup = data.Db1.Groups.FirstOrDefault(q => q.Hash == hash); if (dbGroup != null) { var groupSignature = GetGroupSignature(hash); var groupedFields = data.Db1.GroupedFields.Where(q => q.GroupId == dbGroup.Id).AsEnumerable(); var fieldTemplates = data.Db1.FieldTemplates.Where(q => groupedFields.Select(qq => qq.FieldId).Contains(q.Id)).AsEnumerable() .Select(q => new { htmlId = groupedFields.FirstOrDefault(qq => qq.FieldId == q.Id).HtmlId, package = q, groupedId = groupedFields.FirstOrDefault(qq => qq.FieldId == q.Id).Id }).ToArray(); var optionTags = data.Db1.SelectOptions.Where(q => groupedFields.Select(qq => qq.Id).Contains(q.GroupedFieldId)).AsEnumerable(); result = new GroupPackage { Fields = fieldTemplates.ToDictionary(q1 => q1.package.Name, q2 => FieldPackage.Create(q2.htmlId, q2.package.Tag, q2.package.Attribute == "id", optionTags.Where(q => q.GroupedFieldId == q2.groupedId).Select(q => OptionTag.Create(q)).ToArray())), Categories = groupSignature.GetCategories(), }; } }); return(result); }