【问题标题】:LINQ - GroupBy Year/MonthLINQ - 按年/月分组
【发布时间】:2019-09-19 11:00:48
【问题描述】:

我正在尝试用过去四个月的总金额(总和)填充图表数据,在视觉上它看起来像这样:

到目前为止,我已经尝试按年和月对数据进行分组,但我不确定这是否正确,因为这不起作用..

代码如下:

 var testQUERY = await _context.Calculation
             .AsNoTracking()
             .Where(x => (x.PaymentDate != null && x.PaymentDate > DateTime.UtcNow.AddMonths(-4)))
            .GroupBy(x => new { x.PaymentDate.Value.Year, x.PaymentDate.Value.Month}).ToListAsync();

这是我的付款日期:

我想知道如何只按月分组.. 我面临的错误是下一个:

为警告生成错误 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: LINQ 表达式 'GroupBy(new f__AnonymousType0`2(Year = 转换([p].PaymentDate, DateTime).Year, Month = Convert([p].PaymentDate, DateTime).Month), [p])' 不能 翻译并将在当地进行评估。'。这个异常可以 通过传递事件 ID 抑制或记录 'RelationalEventId.QueryClientEvaluationWarning' 到 'DbContext.OnConfiguring' 中的 'ConfigureWarnings' 方法或 'AddDbContext'。

P.S 如果我想更好,因为我正在使用

x.PaymentDate != null && x.PaymentDate > DateTime.UtcNow.AddMonths(-4)

我不需要新的匿名类型,其中我也包括年份.. 但我不自觉地试图按不存在的列分组.. ?

【问题讨论】:

  • @dfhwze 我不确定这如何解决我的问题?
  • 您的问题可以通过使用 ToList() 或其他东西实现结果然后执行分组来解决
  • @dfhwze 如果我将 groupBy 直接应用于我从 DB 获取的数据,或者如果我将其存储到某个变量而不是将 groupBy 应用于相同的数据,这不一样..
  • 这完全取决于 LINQ to EF 提供程序能够从 LNQ 映射到查询的内容。似乎并非所有 GroupBy 构造都是可翻译的。

标签: c# linq charts group-by


【解决方案1】:

尝试使用这个。有关可能的修复,请参阅 cmets。

var testQUERY = await _context.Calculation
         .AsNoTracking()
         .Where(x => x.PaymentDate != null)
         .Select(x => new { PaymentDate = x.PaymentDate.Value, Row=x }) // pre-select non-null payment date
         .Where(x => x.PaymentDate > DateTime.UtcNow.AddMonths(-4)) // this should go after the grouping, as it might include from just part of the month
         .GroupBy(x => new { x.PaymentDate.Year, x.PaymentDate.Month})
         .Select(grp=> new { grp.Key.Year, grp.Key.Month, Count = grp.Count()) // flatten group and calculate aggregates
         .ToListAsync();

【讨论】:

  • @Euphoris 非常感谢投票!当您在这里时,例如在这 4 个月中的每个月如何按一周分组我想返回 4 周,例如 4 个月将有 16 周的总和:D? :)
  • @Roxy'Pro 这里是灵感:stackoverflow.com/questions/15969174/…
  • 不确定如何将其应用于我的示例.. :/ 在评论中有指向我上面问题的链接
  • @Roxy'Pro 很抱歉,但解决方案对我来说是显而易见的。您显然甚至没有试图理解我发送给您的链接。我真的建议你看一些关于 LINQ-to-Entities 的基本教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多