12

请帮助我了解使用带有 GROUP 和 SUM 的 LINQ 进行查询。

// Query the database
IEnumerable<BestSeller> best_sellers = from bs in (db.MYDATABASE).Take(25)
                                       where bs.COMPANY == "MY COMPANY"
                                       group bs by bs.PRODCODE into g
                                       orderby g.Sum(g.MQTY)
                                       select new BestSeller()
                                       {
                                           product_code = ,
                                           product_description = ,
                                           total_quantity =  
                                      };

我希望:

  • 从 db.MYDATABASE 中获取前 25 项
  • 按 bs.PRODCODE 对所有结果进行分组
  • 按每个 bs.PRODCODE 的总和排序
  • 公司在哪里是“MY COMPANY”
  • 然后将数据通过管道传输到我的BestSeller()对象

我很困惑,因为一旦我加入我group的组合,我的bs变量就变得无用了。

4

1 回答 1

31

我很困惑,因为一旦我将我的组添加到组合中,我的 bs 变量就变得无用了。

是的,因为您不再拥有单个项目 - 您现在正在处理一系列项目。您可以获得每个组的第一项,我认为这是获取描述的有效方式?

var query =  from bs in db.MYDATABASE.Take(25)
             where bs.COMPANY == "MY COMPANY"
             group bs by bs.PRODCODE into g
             orderby g.Sum(x => x.MQTY)
             select new BestSeller
             {
                 product_code = g.Key,
                 product_description = g.First().DESCRIPTION,
                 total_quantity = g.Sum(x => x.MQTY) 
             };

请注意,如果不指定排序,“db.MYDATABASE 中的前 25 个项目”是没有意义的。“顶”以什么方式?您可能想要:

from bs in db.MYDATABASE.OrderByDescending(x => x.Price).Take(25)

或类似的东西。请注意,如果这些公司都没有“MY COMPANY”公司,那么您最终将没有结果......

或者,如果您想要前 25 名畅销书,您希望最后的“参与”部分:

var query =  from bs in db.MYDATABASE
             where bs.COMPANY == "MY COMPANY"
             group bs by bs.PRODCODE into g
             orderby g.Sum(x => x.MQTY) descending
             select new BestSeller
             {
                 product_code = g.Key,
                 product_description = g.First().DESCRIPTION,
                 total_quantity = g.Sum(x => x.MQTY) 
             };
var top25 = query.Take(25);
于 2012-09-03T16:34:05.397 回答