c# – LINQ – 组/总和多列

数据是通过OleDB加载到ado.net数据集中的本地CSV文件.该表有40列,包括发票明细.每行是发票中的单独的行项目,可以由1到n行组成.

查询用于将发票详细信息分组为每个发票的单个行,总计发票金额和到期余额.

以下作品,我正在尝试确定:
是否可以在单个查询中执行此操作?

//group the invoices by invoicenumber and sum the total
//Zoho has a separate record (row) for each item in the invoice
//first select the columns we need into an anon array   
var invoiceSum =
    DSZoho.Tables["Invoices"].AsEnumerable()
    .Select (x => 
        new {  
            InvNumber = x["invoice number"],InvTotal = x["item price"],Contact = x["customer name"],InvDate = x["invoice date"],DueDate = x["due date"],Balance = x["balance"],} );
    //then group and sum
    var invoicetotals =
        invoiceSum
        .GroupBy (s => new {s.InvNumber,s.Contact,s.InvDate,s.DueDate} )
        .Select (g => 
            new {
                InvNumber = g.Key.InvNumber,InvDate = g.Key.InvDate,DueDate = g.Key.DueDate,Contact = g.Key.Contact,InvTotal = g.Sum (x => Math.Round(Convert.ToDecimal(x.InvTotal),2)),Balance = g.Sum (x => Math.Round(Convert.ToDecimal(x.Balance),} );

解决方法

实际上,当您使用invoicetotals的结果时,您只会执行一个查询.在您正在显示代码中,您甚至没有对数据库进行查询.

谷歌“linq延期执行”,这很漂亮;-)

但是如Uriil所说,您可以将语句组合成一个LINQ查询

var invoiceSum =
DSZoho.Tables["Invoices"].AsEnumerable()
.Select (x => 
    new {  
        InvNumber = x["invoice number"],}
 )
 .GroupBy (s => new {s.InvNumber,s.DueDate} )
 .Select (g => 
        new {
            InvNumber = g.Key.InvNumber,} 
 );

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...