【问题标题】:Group By after Union throw "must be reducible node" Exception联合后的 Group By 抛出“必须是可简化节点”异常
【发布时间】:2016-10-01 17:05:57
【问题描述】:

我需要 unoin 两个查询并在 union Group By 之后,但抛出“must be reducible node”异常。下面的示例代码是:

public class ForumPost
{
    public int ForumPostId { get; set; }
    public string Message { get; set; }
    public bool Deleted { get; set; }
    public int ForumTopicId { get; set; }
    public virtual ForumTopic ForumTopic { get; set; }
}

var query1 = _dbContext.ForumPosts
    .Where(e => e.Deleted == true);

var query2 = _dbContext.ForumPosts
    .Where(e => e.Deleted == false);

var query =  query1.Union(query2);

var list = query.GroupBy(e => e.ForumTopicId)
    .Select(group => new
    {
        group.Key,
        Total = group.Count()
    }).Take(10)
    .ToList();

有人遇到过这个问题吗?

【问题讨论】:

  • 内存分组有效吗?
  • @Tseng : 内存有效!

标签: entity-framework-core


【解决方案1】:

我猜这个特殊情况没有启用,但是当您查看 EntityFramework Core Roadmap 时,您会在“Critical O/RM Features”中看到以下条目:

关键的 O/RM 功能

在我们说 EF Core 是推荐的 EF 版本之前,我们认为我们需要的东西。在我们实现这些功能之前,EF Core 将成为许多应用程序的有效选择,尤其是在 EF6.x 无法工作的 UWP 和 .NET Core 等平台上,但对于许多应用程序而言,缺少这些功能将使 EF6.x 成为更好的选择.

查询

  • 改进的翻译将使更多查询能够成功执行,在数据库中评估更多逻辑(而不是在内存中)。
  • GroupBy 翻译会将 LINQ GroupBy 运算符的翻译移动到数据库中,而不是在内存中。

因此,作为一种解决方法,如果您从联合查询中获取数据(即对其执行 .ToList().AsEnuberable())并在内存数据上执行 GroupBy 直到实现了两个功能。

据我所知,EntityFramework Core 1.1 is scheduled for Q4 2016 - Q1/2017,所以您要么等待,要么采取解决方法,具体取决于您项目的截止日期。

如果我没记错的话,Rowan Miller 提到他们希望版本与 ASP.NET Core 1.1 保持同步,该版本也计划在 2016 年秋季发布,并且没有技术原因(即需要 ASP.NET Core 1.1 的功能)这样做,但目前它与 ASP.NET Core 同步,但将来可能会或可能不会获得它自己的独立发布周期。

或者,如果您非常勇敢并且您的 Web 应用程序还没有准备好生产,您可以尝试the nightly builds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2020-02-08
    • 2019-02-27
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多