如何在Linq中连接两个表并生成group by
我对Linq select语句有一个问题。我是Linq的新手,所以任何帮助都会非常有帮助。我做了很多研究,但仍然没有写下正确的Linq语句 我有两个表和属性:如何在Linq中连接两个表并生成group by,linq,Linq,我对Linq select语句有一个问题。我是Linq的新手,所以任何帮助都会非常有帮助。我做了很多研究,但仍然没有写下正确的Linq语句 我有两个表和属性: Table Titles(title_id(PK), title) and Table Sales(title_id(PK), qty) 其中是title\u id和title字符串值,qty是表示某个数量的数字 我需要从这两个表格中选出五个最畅销的书名。 因此,我需要从数量中求和(我们可以有更多具有相同Sales.title\u id
Table Titles(title_id(PK), title) and
Table Sales(title_id(PK), qty)
其中是title\u id
和title字符串值,qty是表示某个数量的数字
我需要从这两个表格中选出五个最畅销的书名。因此,我需要从数量中求和(我们可以有更多具有相同
Sales.title\u id
属性的记录),并按title\u id
分组,按sum(qty)
降序,然后返回属性title和title\u id
我怎样才能为我的问题提供合适的解决方案
问候,,
Dahakka以下是方法语法中的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
}
);
您可以通过
title\u id
(每个组g
将代表所联接的title的所有销售)对表进行组联接。然后选择该标题的标题说明和销售总额。按总数排序的订单结果,选择标题并获取所需数量的顶级销售标题:
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
您使用的是实体框架吗?是的,我为ASP.Net服务和应用程序编写代码,并使用Linq搜索表中的数据。这就是为什么我要问这个问题。嗨,谢谢你的回答。这几乎是我所需要的,谢谢!你为我节省了很多时间。我真的很感激你的帮助!谢谢你对我的回答。通过这两个例子,我确实进一步了解了Linq。再次感谢!