2010-07-22 5 views
0

J'utilise Linq.Dynamic. J'ai déjà ajouté une extension à SelectMany pour créer un nouvel objet anonyme avec les données. Mais, j'ai rencontré un autre problème que je n'arrive pas à résoudre.Créer une nouvelle méthode d'extension Linq SelectMany

Je veux avoir le chainage des méthodes d'extension comme suit, mais en utilisant les méthodes dynamiques:

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 
        }); 

Idéalement je voudrais enchaîner la SelectMany dynamique comme suit:

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

Ou quelque chose que affecter. Le problème est que je ne peux pas obtenir une signature pour correspondre.

J'ai essayé beaucoup d'options différentes pour l'obtenir pour permettre le chaînage. Mais ça ne marche pas. Je pense, idéalement, il ressemblerait à ceci:

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

Mais, il ne reconnaît pas c => c.Orders comme IQueriable. J'ai aussi besoin de comprendre comment faire DefaultIfEmpty sur les résultats pour permettre les JOINs LEFT.

Aidez-nous s'il vous plaît.

Répondre

0

c.Orders est un EntitySet. EntitySet n'implémente pas IQueryable. Essayez c.Orders.AsQueryable()

+0

Qu'en est-il des commandes c => c.Orders? J'ai essayé de le faire comme c => c.Orders.AsQueryable() ERREUR: Impossible de convertir l'expression lambda en type 'chaîne' car ce n'est pas un type de délégué – Dan

+0

Il obtenait la mauvaise définition. Erreur réelle lors de la définition de droite: Impossible de convertir l'expression lambda en type 'System.Linq.IQueryable' car ce n'est pas un type de délégué – Dan

+0

Avez-vous trouvé une solution pour cela? J'ai le même problème ... – Licentia

0

La définition était incorrecte. Erreur réelle lors de la définition de droite: Impossible de convertir l'expression lambda en type 'System.Linq.IQueryable' car ce n'est pas un type de délégué

Questions connexes