2012-09-03 22 views
12

GROUPとSUMを使用してLINQを使用してクエリを実行してください。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変数が無駄になるため、私は混乱します。

答えて

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個の項目」は意味をなさないことに注意してください。どのように "トップ"?あなたは好きかもしれません:

またはそれに類するもの。 "MY COMPANY"の会社を持っていない人がいない場合は、結果は表示されません。

トップ25のベストセラーが必要な場合は、最後に "take"

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); 
+4

この行は本当に有効ですか? 'product_description = g.Key.DESCRIPTION' –

+1

はproduct_codeの' g.Key'と 'product_descriptionの' g.First()。Description'でなければなりません。 –

+0

'g.Sum()'関数内で 'x'が使われているのはなぜですか? – Luke