我对Linq select语句有疑问。我是Linq的新手,所以任何帮助都会非常有帮助。我做了很多研究,但我仍然没有写下正确的Linq声明。
我有两个表和属性:
Table Titles(title_id(PK), title) and
Table Sales(title_id(PK), qty)
其中title_id
和标题字符串值,qty是表示某个数量的数字。
我需要写一个选择,这将从这两个表中获得五个最畅销的标题
所以,我需要从qty中得到总和(我们可以使用相同的Sales.title_id
属性创建更多记录)并按title_id
进行分组,然后按sum(qty)
降序排序,然后返回属性title和{ {1}}。
如何为我的问题提供合适的解决方案?
此致 Dahakka
答案 0 :(得分:1)
您可以按title_id
对表进行分组连接(每个组g
代表所有已加入标题的销售额)。然后选择该标题的标题说明和总销售额。按总计订购结果,选择标题并获取所需的最高销售标题数量:
var query = (from t in db.Titles
join s in db.Sales on t.title_id equals s.title_id into g
select new { Title = t.title, Total = g.Sum(x => x.qty) } into ts
orderby ts.Total descending
select ts.Title).Take(5);
生成的SQL将如下所示:
SELECT TOP (5) [t2].[title] AS [Title], [t2].[value] AS [Total]
FROM (
SELECT [t0].[title_id], (
SELECT SUM([t1].[qty])
FROM [Sales] AS [t1]
WHERE [t0].[title_id] = [t1].[title_id]
) AS [value]
FROM [Titles] AS [t0]
) AS [t2]
ORDER BY [t2].[value] DESC
答案 1 :(得分:0)
以下是方法语法
中的linq查询 sales.GroupBy(s=>s.title_id)
.Select ( x =>
new {
Title_id = x.Key,
Sales= x.Sum (x=> x.qty)
})
.OrderByDescending(x=>x.Sales).Take(5)
.Join( titles,
sale=>sale.Title_id,
title=> title.title_id,
(sale, title)=> new
{
Title = title.Title,
TotalSales=sale.Sales
}
);