#c# #linq #entity-framework #group-by
#c# #linq #entity-framework #сгруппировать по
Вопрос:
Я пытаюсь рассчитать долг моего клиента, используя 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:
Ну, вы могли бы работать со списком деталей invoicesDetails.
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)
});
Комментарии:
1. что вы подразумеваете под этим кодом invoices. Выберите Many(x => x.InvoiceDetails), должен ли я использовать это?
2. @EA просто в зависимости от того, можете ли вы работать с другим списком, чем
invoices
(который был быIEnumerable<InvoiceDetails>
или вам нужно работать сinvoices
, который являетсяIEnumerable<Invoice>
. Возможно, см. Редактирование.