Member 11977906 Ответов: 0

Иерархия Linq детализируется по значениям таблицы


У меня есть две таблицы: одна-таблица счетов-фактур, а другая-иерархическая таблица для счетов в счете-фактуре

Таблица Счетов-Фактур:

| InvoiceNo| AccNo| InvoiceAmount |
    --------------------------------------
    | A1234| 345| 100.00   |
    | A1235| 346| 95.00    |
    | A1236| 347| 15.50    |
    | A1237| 348| 20.10    |


Иерархическая Таблица

| AccNo| HierAccNo| Level|
    --------------------------------------
    | 123|    | 1    |
    | 789| 123| 2    |
    | 890| 123| 2    |
    | 345| 789| 3    |
    | 346| 789| 3    |
    | 347| 890| 3    |
    | 348| 890| 3    |



То, что я пытаюсь сделать, - это свернуть суммы из таблицы счетов-фактур на самый высокий уровень AccNo, который является Level1, а затем на отдельном экземпляре с самого высокого номера счета откатиться обратно на следующие уровни.

Что я уже пробовал:

До сих пор я могу свернуть до самого высокого номера полосы следующим образом :

var BandL2 = from invoice in db.Invoices//Roll up to level 2
                             join ban in db.HierarchyTable
                             on invoice.AccNo equals ban.Ban
                             where invoice.GlobalInvoiceID == globalInvoice.Id
                             group invoice by ban.HierAccNo into bandHierarchy
                             select new
                             {
                                 Level2Band = bandHierarchy.Key,
                                 Amount = bandHierarchy.Sum(m=> m.InvoiceAmount)
                             };

                var bandHierarchyTable = db.HierarchyTable.AsQueryable();

                var BandL1 = from band2 in BandL2 // Roll Up to level 1
                             join band1 in bandHierarchyTable
                             on band2.Level2Band equals band1.Ban
                             group band2 by band1.HierAccNo into bandL1
                             select new
                             {
                                 Level1Band = bandL1.Key,
                                 Amount = bandL1.Sum(m => m.Amount)
                             };

Но теперь у меня возникла проблема с обращением процесса вспять и детализацией с уровня 1, поскольку единственные детали из формы-это AccNo уровня 1(например, 123).
Я пытаюсь сделать это на лету, используя всплывающие модалы, когда я сверлю.

Как мне снова детализировать, чтобы я мог получить уровень за уровнем суммы?
Пример:

Выходная таблица из вышеприведенного кода


| AccNo| Amount|
    --------------------------------------
    | 123| 230.60 |


Затем

| AccNo| Amount|
    -------------------------------------- 
    | 789| 195  | 
    | 890| 35.60|

А затем щелчок по одному из Аккно.

| AccNo| Amount|
    -------------------------------------- 
    | 345| 100| 
    | 346| 95 |



Спасибо!

0 Ответов