.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
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; }
    }
БД В SQL прикладываю. Получилось очень сумбурно, состояние без сна даёт о себе знать. Буду благодарен за любую помощь. В том числе возможно и материально...

Решение задачи: «.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;
        }
        
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы