1

Linq.Dynamic を使用しています。データを使用して新しい匿名オブジェクトを作成するために、別の SelectMany 拡張機能を all に既に追加しています。しかし、解決できないように見える別の問題に遭遇しました。

次のように拡張メソッドチェーンを使用したいのですが、動的メソッドを使用しています。

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 を実行する方法を理解する必要があります。

助けてください。

4

2 に答える 2

0

c.OrdersEntitySet です。EntitySet は IQueryable を実装していません。試すc.Orders.AsQueryable()

于 2010-07-22T20:36:20.647 に答える
0

間違った定義を得ていました。正しい定義の場合の実際のエラー: デリゲート型ではないため、ラムダ式を型 'System.Linq.IQueryable' に変換できません

于 2010-07-28T22:08:42.457 に答える