0

我有一個MockDataStore,它返回List<Task>。然後我將使用Aggregate擴展方法來查詢該列表。所以我在做一個LINQ到對象的查詢,這個工作很好地安靜。現在我已經用繼承DbContext類的類替換了我的模擬數據存儲,現在同樣的查詢不再工作了,因爲我無法使用具有正文的lambda表達式,因爲它無法轉換爲表達式樹。那麼是否有辦法繞過它,仍然在SQL中完成聚合,並避免在內存中執行聚合?下面是我的代碼:對DbContext使用Aggregate擴展方法的查詢

 //List<Task> tasks = MockDataStore.GetData() 
     // .Aggregate(new List<Task>(), (accumulator, treaty) => { accumulator.AddRange(treaty.Tasks); return accumulator; }) 
     // .Where(x => x.AssignedTo.Equals(companyId) && x.StatusId == statusId).ToList(); 

     using (SCGREDbContext context = new SCGREDbContext()) 
     { 
      List<Task> tasks = context.Treaties.Aggregate(new List<Task>(), (accumulator, treaty) => { accumulator.AddRange(treaty.Tasks); return accumulator; }) 
           .Where(x => x.AssignedTo.Equals(companyId) && x.StatusId == statusId).ToList(); 
      return tasks; 
     } 

回答

2

到底爲什麼您使用的Aggregate()?我認爲你的Aggregate()呼叫相當於這個呼叫SelectMany()

context.Treaties.SelectMany(treaty => treaty.Tasks) 
+0

好極了!現在我終於明白'SelectMany'用於什麼了:) – Kassem