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 変数が役に立たなくなるので、私は混乱しています。

はい。アイテムが 1 つではなくなったため、一連のアイテムのグループを処理しています。各グループの最初のアイテムを取得できますが、これは説明を取得する有効な方法だと思いますか?

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 に答える