Ich möchte die folgende Abfrage in LINQ-Syntax konvertieren. Ich habe große Schwierigkeiten damit, es zur Arbeit zu bringen. Ich habe tatsächlich versucht, mit LINQ zu beginnen, fand aber heraus, dass ich mehr Glück haben könnte, wenn ich es anders herum schreiben würde.LINQ to SQL: Komplizierte Abfrage mit Aggregatdaten für einen Bericht aus mehreren Tabellen für ein Bestellsystem
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
Das Endergebnis ist eine Tabelle, die mir Informationen über ein Produkt zeigt, wie Sie oben sehen können. Wie schreibe ich diese Abfrage, in LINQ-Form, mit Verständnis Syntax?
Zusätzlich möchte ich zusätzliche Filter hinzufügen (z. B. zur orders_mainTable).
Hier ist ein Beispiel, dass ich versuchte, Arbeit zu machen, und war ziemlich nahe, aber bin mir nicht sicher, ob es der "richtige" Weg ist, und war nicht in der Lage, sie nach Größe und Farbe aus der orders_productsTable zu gruppieren.
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:
Um ein wenig mehr explizit zu sein, damit Sie verstehen, was ich zu tun versuchen, hier einige weitere Erklärung.
Produkte in products_mainTable gespeichert sind Aufträge werden in orders_mainTable gespeichert Produkte, die in orders_productsTable gespeichert bestellt wurden
ich mehrere Berichte basierend auf Produkte, Aufträge etc. Bohren in die Daten und die Suche nach sinnvoll anlegen möchten Bits, die dem Endbenutzer angezeigt werden.
In diesem Fall versuche ich zu zeigen, welche Produkte über einen Zeitraum gekauft wurden, und sind die beliebtesten. Wie viele verkauft, für welchen Preis, und was ist der Ausbruch pro Bestellung. Vielleicht nicht die beste Reihenfolge, aber ich experimentiere nur und wählte diese aus.
Alle Tabellen haben Beziehungen zu anderen Tabellen. Also aus der Produkttabelle, ich kann zu welchen Bestellungen bestellt, dass Produkt, etc.
Das größte Problem, das ich habe, ist zu verstehen, wie LINQ funktioniert, insbesondere mit Gruppierung, Aggregat Daten, Erweiterungen, Unterabfragen, etc. Es war Spaß, aber es wird frustrierend, weil ich Schwierigkeiten habe, detaillierte Erklärungen dazu zu finden.
Diese Art von Sache ist, wo LINQ kompliziert wird und beginnt, Leistungstreffer einzuführen. Sie könnten versuchen, eine Sicht mit dem von Ihnen geposteten SQL zu schreiben, und dann auf LINQ in der Ansicht zeigen. – willasaywhat
Etwas, an das ich nicht gedacht habe, danke Abyss Knight. –