2016-08-09 3 views
-1

У меня есть два объекта (EF 6) с именем Purchases and Packets. Я могу присоединиться к этим двум, но не совсем уверен, как мне рассчитывать пакеты, содержащиеся в данной Покупке. У меня есть этот SQL-запрос для преобразования в LINQ (предпочтительное выражение Lambda).Преобразование SQL в Linq Lambda

Спасибо

SELECT 
    Pur.*, 
    Pac.Price, 
    (SELECT COUNT(ID) FROM Packets WHERE PurchaseID = Pur.ID) AS PacketCount 
FROM 
    Purchases AS Pur 
INNER JOIN 
    Packets AS Pac 
ON 
    Pur.ID = Pac.PurchaseID 

ПРИМЕЧАНИЕ: Я проверил, но ответил Q-х ни один из них не решает мою проблему.

+1

Было бы полезно, если бы вы могли включить связь между двумя объектами класса. Это двухсторонняя навигационная собственность? – Heberda

+3

Неправильный вопрос. Если объект 'Buyage' связан с сущностью' Package' через отношение 'Packages', вам нужно только написать' myPurcahe.Packages.Count() '. Если вы обнаружите, что являетесь автором объединений между объектами, ваша модель домена, вероятно, неверна. –

+0

Вот что я думал @Panagiotis, я считаю, что взглянуть на объекты поможет. – Heberda

ответ

0

Я не являюсь экспертом в LINQ (далеко от него), но я сделал что-то подобное. Вы говорите, что уже сделали это. Если вдоль линий:

var joinList = (from Item1 in Purchases 
          join Item2 in Packets 
          on Item1.Id equals Item2.PurchaseId 
          select new { Item1, Item2 }).ToList(); 

Тогда вы можете пойти:

var subList = joinList.Where(j => j.Item1.Id == myId).Select(s => { new s.Item1, s.Item2.Price, Count = joinList.Where(j => j.Item1.Id == myId).Count() }).ToList(); 

Это даст вам список, аналогичный набор записей, возвращенный SQL. Обратите внимание, что вам нужно будет вырвать все поля в Item1 (эквивалентно Покупкам. *). Альтернативой является их имя в Select (as s.Item2.Price).

HTH

Смежные вопросы