Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linq中连接两个表并生成group by_Linq - Fatal编程技术网

如何在Linq中连接两个表并生成group by

如何在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

我对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
属性的记录),并按
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。再次感谢!