我正在使用Linq.Dynamic。我已經為所有對象添加了另一個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。
請幫忙。