【问题标题】:LINQ Query with GROUP and SUM使用 GROUP 和 SUM 的 LINQ 查询
【发布时间】:2012-08-28 09:36:54
【问题描述】:

请帮助我了解如何使用带有 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 变量就会变得无用。

【问题讨论】:

    标签: c# asp.net sql linq


    【解决方案1】:

    我很困惑,因为一旦我将我的组添加到组合中,我的 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);
    

    【讨论】:

    • 这条线真的有效吗? product_description = g.Key.DESCRIPTION
    • 我认为应该是g.Key(对于product_code)和g.First().Description对于product_description。
    • 请问为什么x 会在g.Sum() 函数中使用?
    • @Coulton:因为您提供的代码无效 - 您需要为总和提供一个投影
    • 什么样的投影?可以是任何数量吗?再次感谢
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2023-03-21
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多