LINQ - вложенный запрос - PullRequest
       3

LINQ - вложенный запрос

2 голосов
/ 18 февраля 2012

У меня есть оператор SQL, который я пытаюсь преобразовать в запрос LINQ. Мне нужно сделать это, потому что я не могу редактировать свою базу данных :(. Несмотря на это, у меня есть оператор SQL, который выглядит следующим образом:

SELECT
  CustomerID,
  FirstName,
  LastName,
  Gender,
  BirthMonth,
  (SELECT COUNT(ID) FROM PurchaseOrder WHERE [CustomerID]=CustomerID) as TotalPurchases
FROM
  MyEntities

Я знаю, как сделать все, кроме LINQ, для вложенной части запроса. В настоящее время у меня есть следующее:

var results = from x in context.MyEntities 
              select new Customer() 
              { 
                CustomerID = x.CustomerID, 
                FirstName = x.FirstName, 
                LastName = x.LastName, 
                Gender = x.Gender, 
                BirthMonth = x.BirthMonth,
                TotalPurchases = ? 
              };

Как выполнить вложенный запрос в LINQ, чтобы получить значение для TotalPurchases?

Большое спасибо!

Ответы [ 3 ]

6 голосов
/ 18 февраля 2012

Вы также можете просто вставить запрос Linq to Entities:

var results = from x in context.MyEntities 
              select new Customer() 
              { 
                CustomerID = x.CustomerID, 
                FirstName = x.FirstName, 
                LastName = x.LastName, 
                Gender = x.Gender, 
                BirthMonth = x.BirthMonth,
                TotalPurchases = context.PurchaseOrders
                                        .Where(po=>po.CustomerId == x.CustomerId)
                                        .Count()
              };
3 голосов
/ 18 февраля 2012

Просто сделайте отсчет для свойства навигации "PurchaseOrders", которое, как я полагаю, относится к объекту Customer.

TotalPurchases = x.PurchaseOrders.Count()
0 голосов
/ 20 августа 2013

Ответ BrokenGlass не сработал для меня при использовании Linq to Entities и привел к ошибке «Не удается создать постоянное значение типа« MyEntity ». В этом контексте поддерживаются только примитивные типы или типы перечисления».

Чтобы преодолеть это, я использовал следующее:

var results = from x in context.MyEntities
              join po in context.PurchaseOrders on x.CustomerID equals po.CustomerID into purchaseOrders
              select new Customer() 
              { 
                CustomerID = x.CustomerID, 
                FirstName = x.FirstName, 
                LastName = x.LastName, 
                Gender = x.Gender, 
                BirthMonth = x.BirthMonth,
                TotalPurchases = purchaseOrders.Count()
              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...