C# 联接表中记录的LINQ OrderBy计数

C# 联接表中记录的LINQ OrderBy计数,c#,sql,linq,C#,Sql,Linq,在C中,我在将以下tSQL转换为LINQ到SQL时遇到问题。如有任何帮助,将不胜感激: 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

在C中,我在将以下tSQL转换为LINQ到SQL时遇到问题。如有任何帮助,将不胜感激:

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
这是一个连接表的计数排序,这让我陷入了一个循环

以下是我迄今为止没有订购人的情况:

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;

谢谢你的帮助

参见对问题的评论

如何在linq中按订单处理->

如果你有

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

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

要将其排序到位。

如果需要计数,则需要执行group by

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() };

SQL是有问题的-如何对没有分组依据的元素进行计数?你是对的。我实际上没有尝试SQL。我真正想做的是:选择P.name,选择COUNTOI.OrderItem\u ID FROM Order\u Items OI,其中OI.Product\u ID=P.Product\u ID作为Products P popularity FROM P Order BY popularity desc+1,这是一个很好的解决方案,但我认为您的意思是将nameGroup替换为myGroup,反之亦然。谢谢您的帮助。。。我有一个后续问题。基本上,我想按订购次数对我的产品进行排序,以创建最畅销的页面。这里有一些SQL代码可以做到这一点:选择P.name,选择COUNTOI.OrderItem\u ID FROM Order\u Items OI,其中OI.Product\u ID=P.Product\u ID作为Products P popularity FROM P Order BY popularity desc你能把它翻译成LINQ吗?@Steve-很难在评论线程中回答后续问题-如果你发布一个新问题,使用新sql,我相信你会得到一些很好的回答:@Steve-看起来你还是用错了COUNT-如果你想用COUNT,你需要一个分组依据。@Steve-好的,对不起,我一定是读错了SQL-就像我说的,注释中很难理解:扩展方法名是OrderBy和OrderByDescending,而不是sort。