Внедрение LINQ to Entity в отношениях «один ко многим» и «один ко многим» - PullRequest
0 голосов
/ 11 декабря 2011

Я пытаюсь реализовать LINQ to Entity, используя расширение Include.

У меня есть следующая схема:

enter image description here

Вот мой первый LINQ (он работает правильно):

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

Вот мой второй LINQ (не работает):

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

У меня вопрос: почему при реализации Linq для отношений «многие к одному» LINQ работает правильно, а когда я пытаюсь реализовать LINQ «наизнанку» (то есть один ко многим), он не работает?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Первый запрос работает, потому что для каждой детали заказа есть только один связанный заказ - вы смотрите на отношение с точки зрения «n» (детали заказа).

Во втором запросе вы начинаете с "1" в соотношении 1: n между Order и Order_Detail и пытаетесь получить одну цену за единицу - но существует коллекция ("n") связанных объединенных цен и количеств. Ваш текущий подход будет работать только если есть только один связанный Order_Detail для каждого Order.

Если вы хотите получить соответствующие коллекции цен за единицу и количества в вашем анонимном типе, вы можете сделать что-то вроде этого:

 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 голосов
/ 11 декабря 2011

Просто предположение, но как насчет:

ctx1.Orders.... //not ctx1.Order
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...