2011-12-07 208 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/ –