.NET 4.x Генерация дерева на основе дерева! - C#
Формулировка задачи:
Доброго времени суток всем!
Суть: Есть в MSSQL БД, импортированная из dbf Clipper dBASE IV
В таблице хранится спецификации изделия. Все, огромное количество полей.
Нужно составить дерево 1 выбранной спецификации.
Структура таблиц простая - Куда входит, что входит. НО поле КУДА не уникально, и просто построить иерархию у меня не получается. Через пень колоду у меня получилось извратно пребразовать всё это в дерево. Но грузиццо по 10 минут.
Я бы очень хотел преобразовать это безобразие в нормальную таблицу. Но к сожалению пошел уже 3ий день....
Главная проблема в логике преобразования дополнительных полей. В общем, если WP = 0 - это изначальная спека и менять ничего не требуется. (Все модификаторы применяются в последовательности к комплектам и нужным модификатором строки можно считать последний) WP = 1 - Заменяем SD, WP = 2 - Строка Удаляется из спеки
Для построения дерева в принципе всегда известен корень - это Децималь спеки комплекта.
Примерно вот так хотелось бы что бы выглядело:
ID ParentID WC WA SD
1 1 УВ1077402-06 УВ1077402-06 0
2 1 УВ1077402-06 someone n
Нормальная таблица
БД В SQL прикладываю. Получилось очень сумбурно, состояние без сна даёт о себе знать. Буду благодарен за любую помощь. В том числе возможно и материально...
WC куда входит
WA что входит
SD количество
SB комплект
WP признак корректировки
public partial class UV107740206 { public int ID { get; set; } public Nullable<int> ParentID { get; set; } public string WC { get; set; } public string WA { get; set; } public Nullable<int> SD { get; set; } }
Решение задачи: «.NET 4.x Генерация дерева на основе дерева!»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; namespace MigrateApp { class Program { private static string StartKey = "УВ1077402-06"; static ClipperEntities dbContext = new ClipperEntities(); public static void Main(string[] args) { CreateTree(2); //Console.WriteLine("{0} - {1}", row.WC, row.WA); Console.ReadLine(); } private static void CreateTree(int id) { UV107740206 temp = GetRootContent(id); List<FILE10> f10 = GetGenerateContent(temp.WA).ToList(); foreach (FILE10 row in f10) { UV107740206 newOrder = new UV107740206 { ParentID = temp.ID, WC = row.WC, WA = row.WA, SD = row.SD, SB = row.SB, WP = row.WP }; dbContext.UV107740206.Add(newOrder); int changes = dbContext.SaveChanges(); Console.WriteLine(changes.ToString() + " changes saved!"); CreateTree(newOrder.ID); } } private static UV107740206 GetRootContent(int id) { UV107740206 fuv = dbContext.UV107740206.First(u => u.ID == id); return fuv; } private static IQueryable<FILE10> GetGenerateContent(string wc) { IQueryable<FILE10> f10 = dbContext.FILE10.Where(f => f.WC == wc); return f10; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д