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として認識されません。 LEFT JOINを可能にするために、結果に対してDefaultIfEmptyを実行する方法も理解する必要があります。
助けてください。