0

我对 Linq 选择语句有疑问。我是 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 和title_id.

我怎样才能为我的问题制定合适的解决方案?

问候, 达哈卡

4

2 回答 2

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
于 2013-01-02T14:24:28.117 回答
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
                }
            );
于 2013-01-02T14:14:07.063 回答