【问题标题】:Linq Account Hierarchy Drill DownLinq 帐户层次结构向下钻取
【发布时间】:2018-06-26 19:04:14
【问题描述】:

我有两个表,一个是发票表,另一个是发票上帐户的层次结构表

发票表:

| 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 向下钻取时遇到了问题,因为表单中的唯一详细信息是级别 1 的 AccNo(例如 123)。 我正在尝试在钻探时使用弹出模式即时执行此操作。

如何再次向下钻取以便逐级获取金额? 示例:

以上代码的输出表

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

然后

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

然后点击其中一个 AccNo。

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

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc linq asp.net-mvc-5


    【解决方案1】:

    好像只有叶子账户可以附发票,所以获取帐号,检查是否是叶子账户,如果是叶子应该是这样的;

    var hierAccNo = 123;
    var details =  from invoice in db.Invoices
                             join ban in db.HierarchyTable
                             on invoice.AccNo equals ban.Ban
                             where invoice.GlobalInvoiceID == globalInvoice.Id
    and ban.HierAccNo = HierAccNo;
    

    如果不是叶子,您希望在级别 1 上进行原始查询,我猜想得到小计。

    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 and ban.HierAccNo = hierAccNo // dont skip this
    
                             group invoice by ban.HierAccNo into bandHierarchy
                             select new
                             {
                                 Level2Band = bandHierarchy.Key,
                                 Amount = bandHierarchy.Sum(m=> m.InvoiceAmount)
                             };
    

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多