使用groupby计算列的总和

时间:2014-07-04 10:28:56

标签: c# linq entity-framework group-by

我正在尝试使用groupby

计算客户债务

我有2个表格,你可以在这里看到结构:

  public partial class Inovice
    {
        public Inovice()
        {
            this.Payments = new HashSet<Payment>();
            this.InvoiceDetails = new HashSet<InvoiceDetail>();
        }
        public PersianCalendar objPersianCalender = new PersianCalendar();

        [DisplayName("شناسه")]
        public int Id { get; set; }

        [DisplayName("شناسه کاربر")]
        public int MemberId { get; set; }

        public virtual ICollection<InvoiceDetail> InvoiceDetails { get; set; }
    }

此表包含客户发票,另一个表包含客户购买的商品。结构如下:

 public partial class InvoiceDetail
    {
        [DisplayName("شناسه ")]
        public int Id { get; set; }


        [DisplayName("مقدار")]
        public Nullable<double> Amount { get; set; }   

        [DisplayName("شناسه فاکتور")]
        public int InoviceId { get; set; }
        public Nullable<bool> IsReturned { get; set; }

        public virtual Inovice Inovice { get; set; }
    }

我的价值观:

MemberOrCustomer       sumOfAmountvalues
1                        12
1                        8
2                        12
2                        11

这两个表在invoiceid上有关系。我需要为每个amount(InvoiceDetail)求和memberId(Invoice)值,例如:

MemberOrCustomer       sumOfAmountvalues
1                        20
2                        23

我为此做了这段代码,但它不起作用:

 var result= invoices.GroupBy(i => i.MemberId).Select(group=>new {Amount=group.Sum(Amount)} );

祝你好运

1 个答案:

答案 0 :(得分:1)

好吧,您可以使用发票详细信息列表。

var result = invoicesDetails.GroupBy(id => id.Invoice.MemberId)
                            .Select(g => new {
                                       MemberOrCustomer = g.Key,
                                       Amount = g.Sum(x => x.Amount)
                            });

其中invoiceDetails可能是

invoices.SelectMany(x => x.InvoiceDetails)

所以

invoices
    .SelectMany(x => x.InvoiceDetails)
    .GroupBy(id => id.Invoice.MemberId)
    .Select(g => new {
               MemberOrCustomer = g.Key,
               Amount = g.Sum(x => x.Amount)
    });