Casablanca: LINQ

Beitrag lesen

Hallo,

vielen Dank. Ich versuche das Ganze etwas genauer zu erläutern. Meine Daten sind irgenwelche Messwerte, die ich via LINQ aus einer Datenbank hole. Die Daten sind Objekte die in eine Liste gespeichert sind, also etwa so:

  
 List [  
  List1 [ {Id1, Date, Value}, {Id1, Date, Value}, {Id1, Date, Value}, {Id1, Date, Value}, ... ],  
  List2 [ {Id2, Date, Value}, {Id2, Date, Value}, {Id2, Date, Value}, {Id2, Date, Value}, ... ],  
  List3 [ {Id3, Date, Value}, {Id3, Date, Value}, {Id3, Date, Value}, {Id3, Date, Value}, ... ],  
  ...  
]  
  
Id = int, Date = DateTime, Value = float  
  

Die Ids in der jeweiligen Listen sind immer gleich. Das heißt, ich speichere jeweils alle Daten in einer Liste, die eine bestimmte Id haben. Die Gesamtliste gebe ich irgendwann Mal dann zur Weiterverarbeitung zurück.

Nun muss ich an einer Stelle aus allen Listen (hier 3) eine Liste machen. Demnach müssen also  alle Werte(Values), die oben jeweils in einer Spalte untereinander stehen, miteinander addiert werden. Jede Liste hat die Tage z.B. 01.01.2014 bis 31.01.2014 (wenn ein Monat 31 Tage hat). Bei manchen Listen fehlen allerdings einige Tage. Der Wert(Value) bei manchen Tagen ist gleich 0. Da der Datum vom Typ DateTime ist, wird die Sache etwas schwieriger. Dies spielt nämlich an dieser Stelle keine Rolle. Zur gruppierung muss dies also zunächst entfernt werden. Ich habe das mit "(DateTime)EntityFunctions.TruncateTime" versucht, habe ich aber an dieser Stelle keinen Erfolg gehabt.

Die Tage, die nicht in allen Arrays vorhanden sind, verschwinden bei der Gruppierung und der Summenbildung.

> 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.

  
.GroupBy(gr => gr.Id, gr.MyDate.Day, gr.MyValue).  

Das geht nicht, weil ich bei GroupBy(gr => gr.Id,...) nur eine Datenbankspalte (gr.Id) einfügen kann. Für mehrere Spalten muss man mit "new" arbeiten. In einem anonymen Objekt dar man anschent nur einfache Datenfelder verwenden und keine Methoden wie "(DateTime)EntityFunctions.TruncateTime".

Danke nochmals.
Gruß