加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ – 组/总和多列

发布时间:2020-12-15 03:57:08 所属栏目:百科 来源:网络整理
导读:数据是通过OleDB加载到ado.net数据集中的本地CSV文件.该表有40列,包括发票明细.每行是发票中的单独的行项目,可以由1到n行组成. 该查询用于将发票详细信息分组为每个发票的单个行,总计发票金额和到期余额. 以下作品,我正在尝试确定: 是否可以在单个查询中执
数据是通过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,} 
 );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读