在Union throw"之后的Group By必须是可简化的节点"例外

时间:2016-10-01 17:05:58

标签: entity-framework-core

我需要unoin两个查询并在联合Group之后,但是throw"必须是可简化的节点"例外。以下示例代码为:

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();

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

我想这个特殊情况没有启用,但是当您查看EntityFramework核心路线图时,您会在“关键O / RM功能”中看到以下条目:

  

关键O / RM功能

     

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

     

查询

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

因此,如果作为解决方法,您从Union Query中获取数据(即在其上执行.ToList().AsEnuberable())并在on上执行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