对DbContext使用聚合扩展方法的查询

时间:2012-10-12 15:55:07

标签: .net linq entity-framework aggregate-functions expression-trees

我有MockDataStore,返回List<Task>。然后我将使用Aggregate扩展方法来查询该列表。所以我正在做一个LINQ-to-Objects查询,它可以很好地完成工作。现在我已经用继承了DbContext类的类替换了我的模拟数据存储,相同的查询不再起作用,因为我不能使用具有正文的lambda表达式,因为它无法转换为表达式树。那么有没有办法绕过它并仍然在SQL中完成聚合并避免在内存中进行?以下是我的代码:

        //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;
        }

1 个答案:

答案 0 :(得分:2)

为什么你正在使用Aggregate()?我认为您的Aggregate()来电与此SelectMany()的来电相同:

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