2009-04-06 9 views
1

ich mit einer LINQ-Gruppe durch Situation sind stecken versucht, es zu lösen, ohne foreach Anweisung, hier die escenary ist:LINQ Operationen auf Lambda-Gruppierung

Ich habe zwei generische Sammlungen List<OrderHeader> und List<OrderDetail>, haben beide eine gleiche Feld TOTRGVS enthält den Gesamtbetrag aus einem Auftrag, und die Nummer der Bestellung ist der Schlüssel mit dem Namen NDORGV.

Dann will ich „Aufträge, die nicht die gleichen TOTRGVS in OrderHeader haben und OrderDetail“ finden, so habe ich versucht, die folgende Abfrage:

List<RGVCAFAC_ERRORES> diff = (from d in lstOrderDetail 
           join c in lstOrderHeader on d.NDORGV equals c.NDORGV              
           group d by d.NDORGV into g 
           let difTOTOrderDetail = g.Select(p => p.TOTRGVS).Sum() 
           let difTOTOrderHeader = g.Key.???? 
           let diffTOT = difTOTOrderHeader - difTOTOrderDetail 
           where diffTOT != 0 
           select new _ERRORS 
           { 
            NDORGV = g.Key, 
            IMPORT = diffTOT 
           } 
).ToList(); 

in difTOTOrderHeader Ich weiß nicht, wie das TOTRGVS Feld abrufen von OrderHeader. Ich habe versucht, Schlüssel zu verwenden, aber kann kein Feld, nur Erweiterungen für Formatierungsmethoden erhalten.

+0

Wenn Sie denken, es ist schwer dies ohne Verwendung einer foreach-Schleife zu tun bekommen, überlegen, wie viel schwieriger wird es zu debuggen. Gehen Sie voran und verwenden Sie eine Schleife, wenn das einfacher ist. –

Antwort

2

Dies könnte den Trick:

var dictDetails = lstOrderDetail 
    .GroupBy(d => d.NDORGV) 
    .ToDictionary(g => g.Key, g => g.Sum(d => d.TOTRGVS)); 

var result = lstOrderHeader 
    .Where(h => dictDetails[h.NDORGV] != h.TOTRGVS) 
    .ToList(); 
1

Die Funktion Except wird normalerweise verwendet, um Unterschiede in Listen zu ermitteln.

+0

Excepts in Header oder Detail? wenn bereits existiert eine Gruppe von X und X bestimmt die "ausgewählten Objekte", auch ich vergesse, dass Detail kann mehr als eine Zeile das ist die Ursache, die ich Gruppensumme verwenden! –