LINQ OrderBy连接表中的记录数
我在将以下tSQL转换为C#中的LINQ to SQL时遇到问题。任何帮助将不胜感激:LINQ OrderBy连接表中的记录数
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
这是一个JOTED表的COUNT排序,引发我一个循环。
这里是我到目前为止(无排序依据):
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;
感谢您的帮助!
您需要的,如果你想计数
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() };
+1为好的解决方案,但我认为你的意思是'nameGroup'代替'myGroup',反之亦然。 – shuniar
@shuniar - 是的,谢谢 –
感谢您的帮助...我有一个后续问题。基本上,我想根据他们订购多少次来创建“畅销品”页面来对我的产品进行分类。下面是一些SQL代码,将做到这些: 选择 \t P.name, \t(SELECT COUNT(OI.OrderItem_ID)FROM ORDER_ITEMS OI WHERE OI.Product_ID = P.Product_ID)为普及 FROM商品P ORDER BY普及desc 你可以直接将它翻译成LINQ吗? – Stephen
查看对问题的评论。
如何 “按订单” 做LINQ - >
如果你有
var alist = .... select new { prd = p, ord = o };
你可以做
alist.sort((a, b) => a.ord.CompareTo(b.ord));
到位它排序。
扩展方法名称是OrderBy()和OrderByDescending(),而不是sort()。 – BACON
SQL是有问题的 - 你如何计算一个没有group by的元素? – Hogan
你说得对。我没有真正尝试SQL。我真正想要做的是这样的: '选择 \t P.name, \t(SELECT COUNT(OI.OrderItem_ID)FROM ORDER_ITEMS OI WHERE OI.Product_ID = P.Product_ID)为普及 FROM商品P ORDER BY流行desc' – Stephen