2010-07-22 130 views
0

我正在使用Linq.Dynamic。我已經向所有人添加了另一個SelectMany擴展,以便使用這些數據創建一個新的匿名對象。但是,我遇到了另一個我似乎無法解決的問題。創建新的Linq SelectMany擴展方法

我想有擴展方法鏈接如下,但是使用動態方法:

var customerandorderflat = db.Customers 
      .SelectMany(c => c.Orders.SelectMany(o => o.Order_Details, 
       (ord, orddetail) => new 
         { 
          OrderID = ord.OrderID, 
          UnitPrice = orddetail.UnitPrice 
         }).DefaultIfEmpty(), 
       (cus, ord) => new 
        { 
         CustomerId = cus.CustomerID, 
         CompanyName = cus.CompanyName, 
         OrderId = ord.OrderID == null ? -1 : ord.OrderID, 
         UnitPrice = ord.UnitPrice 
        }); 

理想我想鏈的動態的SelectMany如下:

db.Customers.SelectMany(c => c.Orders.SelectMany("Order_Details", "new(outer.OrderID, inner.UnitPrice)"), "new(outer.CustomerID, inner.OrderID)"); 

或者其他類似的影響。問題是我無法得到一個簽名來匹配。

我已經嘗試了許多不同的選擇,以讓它允許鏈接。但它不起作用。我想理想情況是這樣的:

public static IQueryable SelectMany(this IQueryable source, IQueryable innerExpression, string resultsSelector, params object[] values) 

但是,它不能識別c => c.Orders作爲IQueriable。我還需要弄清楚如何對結果執行DefaultIfEmpty以允許LEFT JOIN。

請幫忙。

回答

0

c.Orders是一個EntitySet。 EntitySet不實現IQueryable。嘗試c.Orders.AsQueryable()

+0

c => c.Orders怎麼辦?我試圖做c => c.Orders.AsQueryable() 錯誤: 無法將lambda表達式轉換爲類型'string',因爲它不是委託類型 – Dan 2010-07-22 22:28:47

+0

它得到了錯誤的定義。右鍵定義時的實際錯誤: 無法將lambda表達式轉換爲類型'System.Linq.IQueryable',因爲它不是委託類型 – Dan 2010-07-22 22:41:11

+0

您是否找到了解決方案?我有完全相同的問題... – Licentia 2017-12-25 23:13:12

0

它得到了錯誤的定義。右鍵定義時的實際錯誤:無法將lambda表達式轉換爲類型'System.Linq.IQueryable',因爲它不是委託類型