2011-12-11 3 views
0

Je suis impatient d'implémenter LINQ to Entity à l'aide de l'extension Include.Implémentation de LINQ to Entity sur une relation many-to-one et one-to-many

Je le schéma suivant:

enter image description here

Voici mon premier LINQ (cela fonctionne correctement):

var query = ctx1.Order_Details.Include("Order").Select(o => new 
      { o.OrderID, 
       o.ProductID, 
       o.Order.OrderDate, 
       o.Order.OrderNumber 
       }); 

Voici mon deuxième LINQ (ne fonctionne pas):

Error Cannot convert lambda expression to type 'string' because it is not a delegate type

Mon La question est pourquoi, lorsque j'implémente Linq dans une relation «plusieurs à un», LINQ fonctionne correctement et quand j'essaie d'implémenter LINQ «à l'envers» (c.-à-d. un à plusieurs) ça ne marche pas?

Répondre

2

La première fonctionne requête parce qu'il n'y a qu'un seul ordre connexe pour chaque détail de la commande - vous regardez la relation du point de vue « n » (l'ordre détails).

Dans la deuxième requête, vous commencez avec le « 1 » dans le 1: n relation entre l'ordre et Order_Detail et vous essayez d'obtenir un prix unitaire - mais il y a une collection (le « n ») des prix et quantités unitaires connexes. Votre approche actuelle ne fonctionnerait que s'il n'y en a qu'une Order_Detail pour chaque Order.

Si vous voulez saisir le prix unitaire et les quantités connexes collections dans votre type anonyme que vous pourriez faire quelque chose comme ceci:

var query2 = ctx1.Order.Include("Order_Details").Select(o => new 
      { o.OrderID, 
       o.CustomerID, 
       UnitPrices = o.Order_Details.Select(od => od.UnitPrice), 
       Quantities = o.Order_Details.Select(od => od.Quantity) 
       }); 
+0

BrokenGlass, je vous remercie pour la réponse, il est vraiment halped moi, mais l'acier im manque quelque chose.A mon deuxième LINQ vous avez écrit ce résultat obtenir un UnitPrice et un Quntity.Mais pourquoi ??? Je n'ai pas utilisé dans mes filtres LINQ ou méthode d'extension comme .first() ou .last(). Im un peu confus peut-être parce que je ne comprends pas correctement comment fonctionne LINQ.Thenk! – Michael

+0

J'ai dit * que vous essayez d'obtenir * UnitPrice - c'est pourquoi cela ne fonctionne pas - vous traitez Order_Details comme s'il s'agissait d'un seul objet, mais c'est une collection – BrokenGlass

0

Juste une supposition, mais que diriez-vous:

ctx1.Orders.... //not ctx1.Order 
+0

dépensier, après Pluralisé je reçois 2 autres erreurs. – Michael

Questions connexes