【问题标题】:Need Help Grouping in C#需要帮助在 C# 中进行分组
【发布时间】:2021-12-23 07:51:01
【问题描述】:

我有以下代码按发票编号和分组付款金额

  • 如果类型 1 或 2 我想将 sum(Amount) 显示为 Interest
  • 如果类型 3 或 4 我想将 sum(Amount) 显示为 Principal

我尝试使用以下代码按InvoiceNumber 分组,如下所示,但我得到InvalidOperationException: The LINQ expression GroupByShaperExpression' 异常。

我想完成

 Type       Amount    InvoiceNumber
 1                 $100       123
 2                 $50        123
 3                 $100       123
 4                 $1200      123
 1                 $100       124
 1                 $300       124
 3                 $100       124
 3                 $300       124
 4                 $100       124

我想按发票编号分组,然后对 Type = 1&2 的 Amount 字段的值求和,并显示为 Interest 和 3&4 作为 Princepal

InvoiceNumber       Interest   Princepal
123                 $150        $1300
124                 $400        $500

【问题讨论】:

  • 请提供完整的异常信息。它被截断了
  • @NineBerry 我刚刚更新了它。谢谢

标签: c# .net entity-framework linq


【解决方案1】:

有几个问题:

  • EF Core 在GroupBy 之后无法访问导航属性
  • 即使 EF Core 可以翻译此查询,它也将无效。

考虑用以下方式重写查询:

var ProductPaymentIDs = ProductPayments.Select(pp => pp.ID).ToList();

var query =
    from cl in Context.PaymentCodingLines
    where ProductPaymentIDs.Contains(cl.ProductPaymentID)
    group new { cl.InvoiceLineNav.TypeID, cl.Amount } by g.InvoiceLineNav.InvoiceNav.InvoiceNumber into g
    select new DetailDTO
    {
        InvoiceNumber = g.Key,
        InterestPaid = g.Sum(x => x.TypeID == 1 || x.TypeID == 2 ? x.Amount : 0),
        PrincipalPaid = g.Sum(x => x.TypeID == 3 || x.TypeID == 4 ? x.Amount : 0)
    };

var Details = query.ToList();

【讨论】:

  • 感谢编辑。
  • 谢谢。像我预期的那样工作。谢谢你的帮助!!
猜你喜欢
  • 2011-04-15
  • 2021-03-27
  • 2023-03-22
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多