左外连接IEnumerable

时间:2011-12-07 21:33:36

标签: entity-framework-4

使用Entity Framework 4.1是否可以使用IEnumerable执行左外连接?

例如,假设我想计算每个月的订单数量。

var range = Enumerable.Range(1,6).AsQueryable();
var result = range
               .GroupJoin(context.Orders, i => i, o => o.Month, new 
               {
                   Month = i, 
                   Count = m.Count()
               });

哪会产生以下

Month, Count    
1, 0
2, 0
3, 10
4, 20
5, 0
6, 0

1 个答案:

答案 0 :(得分:1)

仅当您致电context.Orders.ToList()并将所有订单加载到您的应用程序时。 IEnumerable位于应用程序内存中,context.Orders表示数据库中的数据。您无法将数据库中的数据与应用程序内存中的数据相关联。将IEnumerable转换为AsQueryable不会将其转换为数据库。

要直接使用ADO.NET和SQL执行您的要求,您必须创建并填充临时表并执行数据库连接或使用表值参数创建存储过程以执行数据库连接。 EF都不支持这两种技术。