.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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д