【问题标题】:Getting the Total Amount by grouping into month in Entity Framework通过在实体框架中按月份分组来获取总金额
【发布时间】:2020-07-24 18:08:18
【问题描述】:

我需要在实体框架中编写一个 SQL 查询,以便以数组格式获取总费用金额(即我需要按月对金额进行分组)。

我已经尝试过这个实体框架查询,但没有成功:

double[] Amountdate;

using (IncomeExpenseManagementDBEntities incomeExpenseManagementDB = new IncomeExpenseManagementDBEntities())
{
    Amountdate = incomeExpenseManagementDB
                     .Expenses
                     .Select(e => e.Amount)
                     .Where(e => e.userID == IncomeExpenseTool.user.Id)
                     .GroupBy(e => e.Date.Month);
}

感谢对此的任何投入

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    您需要最后执行 Select,然后您需要通过 Sum 来聚合值。

    var amountsByMonth = incomeExpenseManagementDB.Expenses
        .Where(e => e.userID == IncomeExpenseTool.user.Id)
        .GroupBy(e => e.Date.Month)
        .Select(grp => new 
        { 
            Month = grp.Key, 
            TotalAmount = grp.Sum(x => x.Amount) 
        })
        .ToList();
    

    这将导致您的数据库中表示的每个月的金额总和(换句话说,如果您没有 3 月份的数据,您将无法获得 3 月份的结果)。

    【讨论】:

    • 如果我 Console.WriteLine(amountsByMonth);它没有打印结果。相反,它打印如下 SELECT 1 AS [C1], [GroupBy1].[K1] AS [C2], [GroupBy1].[A1] AS [C3] FROM ( SELECT [Filter1].[K1] AS [K1], SUM([Filter1].[A1]) AS [A1] FROM ( SELECT DATEPART (month, [Extent1].[Date]) AS [K1], [Extent1].[Amount] AS [A1] FROM [dbo]。 [费用] AS [Extent1] WHERE [Extent1].[userID] = @p__linq__0 ) AS [Filter1] GROUP BY [K1] ) AS [GroupBy1]。你有什么想法吗?
    • @Senthuran 在末尾添加ToList 以实现查询。
    • 感谢您的回复。我会试试这个,让你知道结果
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多