LINQ OrderBy Количество записей в объединенной таблице - PullRequest
1 голос
/ 02 декабря 2011

У меня проблемы с переводом следующего tSQL в LINQ to SQL в C #.Любая помощь будет принята с благодарностью:

SELECT P.Name
FROM Product P
    INNER JOIN OrderItems OI ON P.productID = OI.productID
        INNER JOIN Orders O ON OI.orderID = O.orderId
WHERE P.Active = 1 AND O.Status > 2
ORDER BY count(OI.orderID) DESC

Это упорядочение по COUNT таблицы JOINED, которая бросает меня в цикл.

Вот что у меня есть (без порядка):

from p in CRM.tProducts
    join oi in CRM.tOrderItems on p.prodID equals oi.prodID
    join o in CRM.tOrders on oi.orderID equals o.orderID
where o.status > 1 && p.active == true
select p;

Спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Вам нужно выполнить группу, если вы хотите счет

SELECT P.Name
FROM Product P
    INNER JOIN OrderItems OI ON P.productID = OI.productID
        INNER JOIN Orders O ON OI.orderID = O.orderId
WHERE P.Active = 1 AND O.Status > 2
GROUP BY P.Name
ORDER BY count(*) DESC

Я предполагаю, что вы на самом деле хотите подсчитать для каждой группы в проекции.

from p in CRM.tProducts
    join oi in CRM.tOrderItems on p.prodID equals oi.prodID
    join o in CRM.tOrders on oi.orderID equals o.orderID
where o.status > 1 && p.active == true
group p by p.Name into nameGroup
orderby nameGroup.Count()
select new { Name = nameGroup.Key, Count = nameGroup.Count() };
0 голосов
/ 02 декабря 2011

См. Комментарий к вопросу.

Как сделать "заказ по" в linq ->

Если у вас есть

  var alist = ....  select new { prd = p, ord =  o };

вы можете сделать

  alist.sort( (a, b) => a.ord.CompareTo(b.ord) );

чтобы отсортировать его на месте.

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