.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;
}
}
}