2016-10-01 63 views
1

我需要unoin两个查询并且结合group by之后,但抛出“必须可节点”的异常。在下面的示例代码是:Group by union 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(); 

有没有人遇到过这个问题?

+0

在内存分组工作? – Tseng

+0

@Tseng:内存中的作品! –

回答

0

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

关键O/RM功能

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

查询

  • 改进翻译将使更多的查询成功执行,与多个逻辑数据库中的(而不是在存储器)被评估。
  • 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