在聯合投擲之後的Group By“必須是可簡化的節點”例外

entity-framework-core

我需要unoin兩個查詢和聯合Group By之後,但拋出“必須是可簡化的節點”異常。在以下示例代碼中:

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

有人遇到過這個問題嗎?

一般承認的答案

我想這個特殊情況沒有啟用,但是當你看一下EntityFramework核心路線圖時,你會在“關鍵O / RM功能”中看到以下條目:

關鍵的O / RM功能

在我們說EF Core是EF的推薦版本之前我們認為我們需要的東西。在我們實現這些功能之前,EF Core將是許多應用程序的有效選項,特別是在諸如UWP和.NET Core等平台上,其中EF6.x不起作用,但對於許多應用程序而言,缺少這些功能將使EF6.xa成為更好的選擇。

詢問

  • 改進的轉換將使更多查詢成功執行, 在數據庫 (而不是內存)中評估更多邏輯
  • GroupBy轉換將LINQ GroupBy運算符的轉換移動到數據庫,而不是內存中。

因此,如果作為一種解決方法,您從Union Query中獲取數據(即在其上執行.ToList().AsEnuberable() )並在內存數據上執行GroupBy,直到兩者為止,您將不會失去太多功能已實現。

據我所知, EntityFramework Core 1.1計劃於2016年第四季度 - 2017年第一季度推出 ,因此您可以等待或執行解決方法,具體取決於項目的截止日期。

如果我沒記錯的話,Rowan Miller提到他們希望保持版本與ASP.NET Core 1.1保持同步,這也是計劃於2016年秋季推出的,並且沒有技術原因(即需要ASP.NET Core 1.1的功能) ,但是現在它與ASP.NET Core同步,但未來可能會或可能不會獲得它自己的獨立發布週期。

或者如果你非常勇敢並且你的Web應用程序還沒有生產就緒,那麼你可以嘗試夜間構建



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因