微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,} 
 );

原文地址:https://www.jb51.cc/csharp/93247.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐