【问题标题】:Aggregating parent/child tables using Linq to SQL and VB.net使用 Linq to SQL 和 VB.net 聚合父/子表
【发布时间】:2009-09-18 08:02:34
【问题描述】:

我对 LINQ 做噩梦了。

我有一个项目表,每个项目都有许多 InvoiceHeaders。 Invoice 标头有一个字段 AmountNet - 发票的值。

为了参数,我想检索 Projects 中的所有字段,包括发票标题的计数和 AmountNet 的总和。 IE。我的项目清单,我已经筹集了多少发票以及价值。

这听起来并不难......好吧,我刚刚花了两个小时的大部分时间通过 Google 和 SO 充电来寻找解决方案。我已经做到了:

from c in Projects _
select new with _
{ _
    .ID = c.ID, _
    .Invoices = InvoiceHeaders.Where(Function(p) c.ID = p.ProjectID).Count, _
    .InvoiceValue = InvoiceHeaders.Where(Function(p) c.ID = p.ProjectID).Sum(function(f) f.AmountNet) _
}

那些有鹰眼的人会发现这个语句是多么可怕 - 对于每个项目,它运行两个查询来获取聚合。哎呀。

我在 Linq / vb 中也有多个聚合:

from ih in InvoiceHeaders _
group ih by ih.projectid into g = Group  _
select new with { _
    .InvoiceValue = g.Sum(function(f) f.AmountNet), _
    .InvoiceCount = g.Count _
} _

但是我不知道如何返回项目的详细信息。 Esp 在 Vb.net 中视为“密钥”不起作用。

顺便说一句 - 我正在使用 VB.net :)

有什么想法吗?

【问题讨论】:

    标签: vb.net linq-to-sql


    【解决方案1】:

    我的尝试是这样的

    from ih in InvoiceHeaders _
    group ih by ih.projectid into g = Group  _
    select new with {.pjs=(from p in projects where p.ID=ih.projectid select p), _
        .InvoiceValue = g.Sum(function(f) f.AmountNet), _
        .InvoiceCount = g.Count _
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多