2016-05-12 8 views
1

Ich habe die folgende LINQ-Abfrage WHERE-Klausel, die das erwartete Ergebnis nicht zurückgibt. dtTemp row.Item(0) hat Werte wie "GE", "LE", "ST", "PL", während Stkyard ein String-Array mit einem oder mehreren dieser Werte ist.Linq-Abfrage mit Zeichenfolgenarray in Where-Klausel

Ich erwarte die folgende Abfrage Werte in Stkyard auf Eintrag zu filtern, aber das zurückgegebene Ergebnismenge hat Summe aller Werte in dtTemp

dtQuery = (From row In dtTemp 
      Group row By grp = 
      New With {Key .mth = row.Item(1), Key .mthdesc = row.Item(2)} Into Group, 
      val1 = Sum(Convert.ToDecimal(row.Item(3))), val2 = Sum(Convert.ToDecimal(row.Item(4))) 
      Where Group.Any(Function(p) Stkyard.Contains(p.Item(0))) 
      Select New With {grp.mth, grp.mthdesc, val1, val2} 
      Distinct).ToList 

Jede Hilfe?

DonNetFiddle Example

+0

Können Sie eine [.NETFiddle] (https://dotnetfiddle.net/) Beispiel teilen? – aloisdg

+0

@aloisdg Ich habe ein Beispiel in der Post hinzugefügt. – Nilanjan

Antwort

1

Sie haben nach Monat gruppiert, bevor Sie filtern, und dann filtern Sie für alle Gruppen, in denen keine Übereinstimmungen gefunden werden. Beispiel: Ihre Jan 16-Gruppe enthält 3 Zeilen, eine von jedem Typ, und Ihr Filter entspricht der gesamten Gruppe, da sie eines der Elemente in Stkyard enthält.

Um dies zu beheben, filtern Sie die Zeilen, bevor Sie Gruppe:

dtQuery = (From row In dtTemp 
     Where Stkyard.Contains(row.Item(0)) 
     Group row By grp = 
     New With {Key .mth = row.Item(1), Key .mthdesc = row.Item(2)} Into Group, 
     val1 = Sum(Convert.ToDecimal(row.Item(3))), val2 = Sum(Convert.ToDecimal(row.Item(4))) 
     Select New With {grp.mth, grp.mthdesc, val1, val2} 
     Distinct).ToList 

Updated Fiddle

+0

Vielen Dank! Ich hatte den Eindruck, dass die Where-Klausel immer nach der Group By-Klausel steht. – Nilanjan

+0

Sie können so viele Felder verwenden, wie Sie möchten. Wenn Sie es nach der Gruppe verwenden, filtern Sie die Gruppen (mehr wie ein HAVING in SQL). – Richard

Verwandte Themen