2016-12-22 5 views
0

Ich habe eine Umsatzdatentabelle, die aus einzelnen Artikelverkäufen besteht, mehrere Zeilen bilden eine einzelne Rechnung (BillID) im System. Die Daten sehen so aus:Linq Gruppierung basierend auf Anforderungen

CompanyID | StoreID | BillItemID | RechnungsID | Datumsschlüssel | Beschreibung | ein paar andere Spalten für den Betrag verkauft und Steuern usw.

Alles, was zählt, ist wirklich die BillID, muss ich Rechnungen finden, die beide die Elemente enthalten, die in der Linq-Anweisung WHERE-Klausel enthalten sind.

Hier ist meine aktuelle Linq-Anweisung

FactSales 
    .Where(c => c.CompanyID == 433) 
    .Where(c => c.StoreID == 360) 
    .Where(c => c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo") 
    .GroupBy(m => new { m.BillID }) 

Diese alle Verkäufe auswählt, die entweder 2 oder 3 Stück Combos waren. Aber die Gruppe liefert nicht die Informationen, die ich brauche, da es Fälle gibt, in denen Leute ein Vielfaches des gleichen Artikels kaufen, also sind diese BillIDs nicht repräsentativ für Rechnungen, bei denen beide Artikel verkauft wurden.

Ist das mit linq möglich?

+2

Ihre Frage ist ein wenig unklar; Könnten Sie einen Beispieldatensatz bereitstellen und ausgeben? – BradleyDotNET

+0

Sind die BillID eindeutige Nummern? Oder in verschiedenen Läden dupliziert? Wenn Sie eindeutig sind, warum filtern Sie dann nach CompanyID und Store ID. Vor allem, wenn einige Unternehmen mehrere CompanyID-Nummern haben, aber Rechnungsabteilungen teilen. – jdweng

+0

BillIDs sind nicht eindeutig, sie erfordern eine Storeid und CompanyID mit ihnen zu gehen, um einzigartig zu sein, aber im Falle dieser Abfrage die RechnungsID ist einzigartig, weil die anderen beiden Faktoren – Nate58

Antwort

2

Wenn ich das richtig verstanden, Sie wollen die Gruppen herauszufiltern, die beide Elemente aus dem Where enthält.

Es gibt mehrere Möglichkeiten, wie Sie das tun können.

Zum Beispiel die unterschiedlichen Elemente in einer Gruppe zu zählen:

... 
.Where(g => g.Select(c => c.Description).Distinct().Count() == 2) 

oder die Gruppe Inhalt für Artikel Existenz Überprüfung (Duplizieren Where Filterbedingungen):

... 
.Where(g => g.Any(c => c.Description == "2 Piece Combo") && 
    g.Any(c => c.Description == "3 Piece Combo")) 
+0

Das war Es dankt Ivan. – Nate58

0

Wie wäre es, eine weitere Bedingung hinzuzufügen, mit einer "& &", wo Sie überprüfen, ob die verkaufte Menge größer als 1 ist. Hinweis, die OR wurde zusammengefasst.

FactSales 
.Where(c => c.CompanyID == 433) 
.Where(c => c.StoreID == 360) 
.Where(c => (c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo") && c.purchaseQuantity > 1) 
.GroupBy(m => new { m.BillID }) 
Verwandte Themen