次のクエリをLINQ構文に変換したいと思います。私はそれを機能させるために管理するのに非常に苦労しています。実際にLINQから始めてみましたが、逆に書いた方が運が良かったかもしれません。
SELECT
pmt.guid,
pmt.sku,
pmt.name,
opt.color,
opt.size,
SUM(opt.qty) AS qtySold,
SUM(opt.qty * opt.itemprice) AS totalSales,
COUNT(omt.guid) AS betweenOrders
FROM
products_mainTable pmt
LEFT OUTER JOIN
orders_productsTable opt ON opt.products_mainTableGUID = pmt.guid
LEFT OUTER JOIN orders_mainTable omt ON omt.guid = opt.orders_mainTableGUID AND
(omt.flags & 1) = 1
GROUP BY
pmt.sku, opt.color, opt.size, pmt.guid, pmt.name
ORDER BY
pmt.sku
最終結果は、上記のように製品に関する情報を示す表になります。理解構文を使用して、このクエリをLINQ形式で作成するにはどうすればよいですか?
さらに、フィルターを追加したい場合があります(たとえば、orders_mainTableに)。
これは私が仕事をしようとした一例であり、かなり近いものでしたが、それが「正しい」方法であるかどうかはわかりません。また、orders_productsTableからサイズと色でグループ化できませんでした。
from pmt in products_mainTable
let Purchases =
from opt in pmt.orders_productsTable
where ((opt.orders_mainTable.flags & 1) == 1)
where ((opt.orders_mainTable.date_completedon > Convert.ToDateTime("01/01/2009 00:00:00")))
select opt
orderby pmt.sku
select new {
pmt.guid,
pmt.sku,
pmt.name,
pmt.price,
AvgPerOrder = Purchases.Average(p => p.qty).GetValueOrDefault(0),
QtySold = Purchases.Sum(p => p.qty).GetValueOrDefault(),
SoldFor = Purchases.Sum(p => p.itemprice * p.qty).GetValueOrDefault()
}
*編集:
私がやろうとしていることを理解できるようにもう少し明確にするために、ここにもう少し説明があります。
製品はproducts_mainTableに保存されます注文はorders_mainTableに保存されます注文された製品はorders_productsTableに保存されます
製品や注文などに基づいていくつかのレポートを作成し、データを掘り下げて、エンドユーザーに表示する意味のあるビットを見つけたいと思います。
この例では、ある期間に購入された製品のうち、最も人気のある製品を表示しようとしています。販売数、価格、注文あたりのブレイクアウトはどれくらいですか。おそらく最良の順序ではないかもしれませんが、私はただ実験してこれを選びました。
すべてのテーブルは他のテーブルと関係があります。したがって、製品テーブルから、その製品を注文した注文などを知ることができます。
私が抱えている最大の問題は、LINQがどのように機能するか、特にグループ化、集合体データ、拡張機能、サブクエリなどでどのように機能するかを理解することです。楽しかったですが、これを行う方法の詳細な説明を見つけるのが難しいため、イライラし始めています。