dedlfix: LINQ

Beitrag lesen

Tach!

var values = query.SelectMany(n => n).GroupBy(gr => gr.TimeStamp.Day).Select(gr => gr.Sum(g => g.DeviceDay)).ToList();

Da gibt es zwei Probleme:

Erstmal zum Klarstellen, arbeitest du mit Arrays oder wird aus dem LINQ-Bandwurm am Ende eine SQL-Query erstellt? Eventuell bietet es sich an, weiter vorn ein ToList() einzufügen, um aus LINQ-to-SQL/whatever rauszukommen und mit LINQ-to-Objects weitermachen zu können. Das ist dann reines C# und muss nicht nach SQL übersetzt werden. Je nach LINQ-Ausführung stehen ja auch mal mehr mal weniger Methoden(überladungen) zur Verfügung.

  1. Die Tage, die nicht in allen Array vorhanden sind, tauchen merkwürigerweise nicht in der Merge-List uaf.

An welcher Stelle verschwinden sie denn? Zerleg doch mal die Methodenkette in ihre Einzelteile und schau dir die jeweiligen Ergebnisse an.

  1. Mein GroupBy() sollte eingentlich so aussehen;
    .GroupBy(gr => gr.Id, gr.MyDate.Day, gr.MyValue).Select(gr => gr.Sum(g => g.MyValue)).ToList();

Wenn du einen Methodenaufruf zeigst, solltest du auch dazuschreiben, welche der überladenen Signaturen das ist. Besonders wenn man als Leser nicht weiß, von welchem Typ die Parameter sind.

Das geht aber nicht. Ich muss alle Felder, die im GroupBy vertreten sind, mitnehmen.

Kannst du das "geht nicht" etwas genauer beschreiben? Und was sind "alle Felder"? Ich kenne bisher nur das Datum und einen Wert, der summiert werden soll.

Hast eventuell eine Idee?

Wenn du mir den Anwendungsfall etwas nachvollziehbarer beschreibst, kann ich gezielter nach Lösungsmöglichkeiten suchen.

dedlfix.