【问题标题】:linq sum amount_db and amount_cr group by date and nrt_acc and company_namelinq sum amount_db 和 amount_cr 按日期和 nrt_acc 和 company_name 分组
【发布时间】:2023-03-21 12:00:01
【问题描述】:

我有一个名为 nrt_bal_sheet 的表

date      |company_name|amount_db|amount_cr|balance|     nrt_acc
11/12/2021  MoneyGram   5000           0    5000         0046D
11/12/2021  MoneyGram   0           2000    7000         0046D
11/12/2021  MoneyGram   0           20000   20000        0046D
12/9/2021   Ria Money   0           15000   15000        0039D
12/11/2021  MoneyGram   10000      857300   857300       0046T
12/11/2021  MoneyGram   1000       85730    914318.61    0046T
12/12/2021  MoneyGram   1000       85730    1000048.61   0046T

我想按日期、nrt_acc、company_name 以及仅最后一个字母“T”的那些 nrt_acc 对 amount_db 和 amount_cr 和余额组求和。

我需要以下结果

date      |company_name   | amount_db |amount_cr |  balance  |  nrt_acc

12/11/2021  MoneyGram          11000      943030    932030.00    0046T

12/12/2021  MoneyGram           1000       85730    1016760.00   0046T

这是我已经完成的代码。

nrtBalanceSheet = (
    from n in db.nrt_bal_sheet
    group n by new { n.date, n.nrt_acc, n.company_name } into g
    orderby g.date
    select new ValuePassModel
    {
        advice_issue_date = g.Key.date,
        company_name = g.key.company_name,
        company_code = g.key.nrt_acc,
        debit = g.Sum(n => n.amount_db),
        credit = g.Sum(n => n.amount_cr),
        nrt_bal_sheet = g.Sum(n => n.balance)
    }
    ).ToList();

但我收到了这个错误。

错误 CS1061 'IGrouping, nrt_bal_sheet>' 不包含 'date' 的定义并且没有扩展方法 'date' 接受第一个 'IGrouping, nrt_bal_sheet>' 可以找到(你是 缺少 using 指令或程序集引用?)

请帮助我纠正我的 linq 查询兄弟。

【问题讨论】:

  • 请添加 LINQ 提供程序名称和版本(EF、NHibernate 等)。
  • 尝试:“orderby g.key.date”
  • 试过但错误返回Error CS1061 'IGrouping<<anonymous type: DateTime date, string nrt_acc, string company_name>, nrt_bal_sheet>' does not contain a definition for 'key' and no extension method 'key' accepting a first argument of type 'IGrouping<<anonymous type: DateTime date, string nrt_acc, string company_name>, nrt_bal_sheet>' could be found (are you missing a using directive or an assembly reference?)@TN

标签: linq


【解决方案1】:

正如有人已经指出,您的 Linq 提供程序在此讨论中很重要。 IE。我用 Linq to Object 试过这个,它工作得很好,正如你从我的 LinqPad 输出屏幕截图中看到的那样。您有一个选择是获取数据,然后执行.ToList(),它将您的数据加载到内存中,然后继续执行 Linq 查询的其余部分,以便它将作为 Linq to Object 执行。不好的一面是它会从内存中的数据存储中提取所有数据。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多