Я хочу преобразовать следующий запрос в синтаксис 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()
}
* Edit:
Чтобы быть немного более явным, чтобы вы могли понять, что я пытаюсь сделать, вот еще несколько объяснений.
Продукты хранятся в products_mainTable
Заказы хранятся в orders_mainTable
Заказанные продукты хранятся в таблице orders_productsTable
Я хочу создать несколько отчетов на основе продуктов, заказов и т. Д., Углубляясь в данные и находя значимые биты для отображения конечному пользователю.
В данном случае я пытаюсь показать, какие продукты были приобретены за определенный период времени и являются ли они наиболее популярными. Сколько продано, по какой цене и каков прорыв на заказ. Возможно, не самый лучший заказ, но я просто экспериментирую и выбрал этот.
Все таблицы связаны с другими таблицами. Таким образом, из таблицы продуктов я могу узнать, по каким заказам был заказан этот продукт и т. Д.
Самая большая проблема, с которой я сталкиваюсь, - это понимание того, как работает LINQ, особенно с группировкой, агрегированием данных, расширениями, подзапросами и т. Д. Это было забавно, но это начинает разочаровывать, потому что мне трудно найти подробные объяснения о том, сделай это.