LINQ to SQL: Komplizierte Abfrage mit Aggregatdaten für einen Bericht aus mehreren Tabellen für ein Bestellsystem

8

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, habe aber festgestellt, dass ich vielleicht mehr Glück habe, wenn ich es umgekehrt schreibe.

%Vor%

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 noch weitere Filter hinzufügen (zum Beispiel die orders_mainTable).

Hier ist ein Beispiel, dass ich versucht habe, Arbeit zu machen, und war ziemlich nah, aber bin mir nicht sicher, ob es der "richtige" Weg ist, und war nicht in der Lage, sie nach Größe und Farbe aus dem orders_productsTable zu gruppieren.

%Vor%

* Bearbeiten:

Um ein wenig expliziter zu sein, damit Sie verstehen können, was ich versuche zu tun, hier ist eine weitere Erklärung.

Produkte werden in products_mainTable gespeichert Bestellungen werden in orders_mainTable gespeichert Produkte, die bestellt wurden, werden in orders_productsTable

gespeichert

Ich möchte mehrere Berichte erstellen, die auf Produkten, Aufträgen usw. basieren und die Daten durchsuchen und sinnvolle Bits finden, die dem Endbenutzer angezeigt werden.

In diesem Fall versuche ich zu zeigen, welche Produkte über einen bestimmten Zeitraum gekauft wurden und welche am beliebtesten sind. 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. Aus der Produkttabelle kann ich also entnehmen, welche Bestellungen das Produkt bestellt haben usw.

Das größte Problem, das ich habe, ist zu verstehen, wie LINQ funktioniert, insbesondere mit Gruppierung, Aggregatdaten, Erweiterungen, Unterabfragen usw. Es hat Spaß gemacht, aber es wird frustrierend, weil ich Schwierigkeiten habe, detaillierte Erklärungen zu finden Mach das.

    
Matthew M. 04.02.2009, 19:49
quelle

3 Antworten

3

Bruno, vielen Dank für deine Hilfe! Der FirstOrDefault () war wahrscheinlich die größte Hilfe. Nach etwas von dem, was Sie getan haben, und einer anderen Ressource habe ich folgendes gefunden, das wunderbar zu funktionieren scheint! Diese LINQ-Abfrage unten gab mir fast eine exakte Replikation der oben angegebenen SQL.

Hier ist die andere Ressource, die ich bei LINQ OUTER JOIN gefunden habe: Blogpost

Letzte Antwort:

%Vor%     
Matthew M. 05.02.2009, 04:32
quelle
5

Ich bin auch ein Anfänger in LINQ. Ich weiß nicht, ob dies der richtige Weg für die Gruppierung nach mehreren Feldern ist, aber ich denke, Sie müssen diese Gruppierungsfelder in einen repräsentativen Schlüssel umwandeln. Wenn Sie also davon ausgehen, dass alle Ihre Gruppierungsfelder Strings oder Ints sind, können Sie einen Schlüssel wie folgt erstellen:

%Vor%

Ich habe das nicht getestet, also sehen Sie, ob Ihnen das irgendwie hilft.

    
bruno conde 04.02.2009 21:44
quelle
0

Das war sehr hilfreich für mich, danke. Ich hatte ein ähnliches Problem, das ich versuchte zu sortieren, nur mein Fall war viel einfacher, da ich keine Joins hatte. Ich habe einfach versucht, ein Feld zu gruppieren, das Min eines anderen zu bekommen und den Count. (min und in der gleichen Abfrage zählen)

Hier ist das SQL, das ich in der Linq-Syntax neu erstellen wollte:

%Vor%

Dank eures Beitrags habe ich es schließlich geschafft:

%Vor%

Was hinter den Kulissen das folgende SQL erzeugt:

%Vor%

Perfekt, genau das, wonach ich gesucht habe. Der Schlüssel für mich war, dass Sie gezeigt haben, dass es möglich ist, dies innerhalb des neuen {} zu tun, was ich nie in Betracht gezogen hätte. Das ist riesig, ich habe jetzt das Gefühl, dass ich ein besseres Verständnis für die Zukunft habe.

    
John 01.05.2009 15:37
quelle