2016-10-13 8 views
2

グループクエリによってデータベースからデータを取得し、その比率を計算します。例えば、在庫値を2日間取得し、変更率を知りたい倉庫内のポジションを取る。リストをグループ化し、結果の一致するアイテムに対して機能を実行します。

例えば:

var query = from o in dbContext.Orders 
      where (o.Date == firstDate) || (o.Date == secondDate) 
      group o by o.Date into g 
      select g; 

どのように今(内部またはクエリの外側)マッチング注文商品の変化率をcaluclateことができますか? (この比率は(newOrder.Stock/oldOrder.Stock)-1として定義されています)私は簡単なやや冗長な方法でそれを行う方法を知っていますが、私はlinqにもっと洗練されたソリューションがあることを期待していました。

編集:照会されたデータと望ましい結果の例。

ID Date InStock ItemID 
1 15.01 5000 1 
2 16.01 7000 1 
3 15.01 9000 2 
4 16.01 2000 2 

これは、今私はすでに二つのリストにグループを分離して、各リストをチェックすることによって、これを達成した項目1と項目2

のための-78%の減少の40%の増加を示すだろう他のリストの対応する項目この方法では、比率を簡単に計算できますが、不要なように見えるいくつかの新しい変数とネストされたforeachループを作成します。私は単により洗練されたソリューションを探しています。

+1

テーブルの見た目や期待される結果のサンプルデータを提供すれば、理解しやすくなります。また、あなたがこれを達成しようとした考え/方法 –

答えて

0
var query = from o in orders 
       where (o.Date == firstDate || o.Date == secondDate) 
       group o by o.ItemID into g 
       select new 
       { 
        ItemID = g.Key, 
        DateStart = g.ElementAt(0).Date, 
        DateEnd = g.ElementAt(1).Date, 
        Ratio = g.ElementAt(1).InStock/(float)g.ElementAt(0).InStock 
       }; 

私たちは、各グループは、単に新しい匿名型指定された項目で除算した結果を選択するために、2つの項目(各日付に1つ)が含まれますことを知っているという事実を使用しています。

私の例ではInStockのタイプとしてintが使用されていますので、必要がない場合は(float)キャストを削除してください。

関連する問題