2011-12-07 210 views
1

使用实体框架4.1是否可以使用IEnumerable执行左外连接?左外连接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() 
       }); 

只有当你调用context.Orders.ToList()并加载所有订单到您的应用程序,它会产生以下

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

回答

1

IEnumerable位于您的应用程序内存中,context.Orders代表数据库中的数据。您不能将应用程序内存中的数据与数据库中的数据结合在一起。将IEnumerable转换为AsQueryable不会将其放到数据库中。

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

+0

我想这是真实的,但如果你考虑相反,它可以通过创建一个可枚举值的联合。只需要一个正确的外部连接,而不是一个左外部连接http://blog.hompus.nl/2010/08/26/joining-an-iqueryable-with-an-ienumerable/ –