Casablanca: Dynamic-LINQ und Sum

Hallo Forum,

ich hoffe, dass jemand sich hier mit den Dynamic-LINQ-Statements auskennt.

Also, ich habe ein Dynamic-LINQ-Statement wie folgt:

  
db.MyTabel.Where("Id == @0 And (MyTimeStamp >= @1 And MyTimeStamp <= @2)",  
                  id, datum1, datum2).Select(  
                  "new (Id, MyTimeStamp, Income").OrderBy("MyTimeStamp"));  

Meine Frage ist, wie kann ich nun in dem oberen Statement eine Summe über "Income" bilden? Ich meine etwas wie dies:

  
db.MyTabel.Where("Id == @0 And (MyTimeStamp >= @1 And MyTimeStamp <= @2)",  
                  id, Datum1, Datum2).Select(  
                  "new (Id, MyTimeStamp, Income, Sum(Income)").OrderBy("MyTimeStamp"));  

Hat jemand eine Idee?

Danke im Voraus.

Gruß

  1. Tach!

    Also, ich habe ein Dynamic-LINQ-Statement wie folgt:

    db.MyTabel.Where("Id == @0 And (MyTimeStamp >= @1 And MyTimeStamp <= @2)",
                      id, datum1, datum2).Select(
                      "new (Id, MyTimeStamp, Income").OrderBy("MyTimeStamp"));

      
    Erstmal was allgemeines. Die Sprache ist C#, nicht SQL. Am ehesten käme da noch C als Code-Auszeichnung in Frage. C# kennt die Syntaxauszeichnung des Forums nicht.  
      
    Warum schreibst du denn das alles als Strings? Modernes C# und LINQ kann Expressions verwenden. Weil Expressions Code sind, hat man gleich beim Tippen die Rückmeldung, ob Syntaxfehler drin sind oder nicht, nebst so netter Sachen wie Code-Vervollständigung. Allerdings brauchst du dann auch ein (generiertes) Model (erzeugt aus der Datenbank-Struktur oder über Code-First).  
      
    
    > Meine Frage ist, wie kann ich nun in dem oberen Statement eine Summe über "Income" bilden? Ich meine etwas wie dies:  
      
    
    > ~~~c
      
    
    > db.MyTabel.Where("Id == @0 And (MyTimeStamp >= @1 And MyTimeStamp <= @2)",  
    >                   id, Datum1, Datum2).Select(  
    >                   "new (Id, MyTimeStamp, Income, Sum(Income)").OrderBy("MyTimeStamp"));  
    > 
    
    

    Das kann so nicht gehen. Jeder Datensatz wird einzeln verarbeitet. Der hat zwar anscheinend ein Feld namens Income, aber das ist ein Wert. Die Summe davon ist immer noch der Wert selbst. Vielleicht willst du ja die Werte einer Gruppe von Datensätzen haben, aber dazu musst du erstmal gruppieren, nach welchem Kriterium auch immer.

    dedlfix.

    1. Hi,

      dnake für deine Antwort.

      Was meinst du damit?

        
      Erstmal was allgemeines. Die Sprache ist C#, nicht SQL.  
      
      

      Das ist klar, dass das Ganze in der C# Umgebung durchgeführt wird. Das Statement ist aber immer noch ein LINQ-Statement, woraus zur Laufzeit eine SQL-Anweisung gebildet wird.

      Ich musste leider auf Dynamic-Linq zurückgreifen, weil ich die Tebellen-Felder erst zur Laufzeit erhalte. So etwa:

        
      db.MyTabel.Where("Id == @0 And (MyTimeStamp >= @1 And MyTimeStamp <= @2)",  
                        id, datum1, datum2).Select(  
                        "new (Id, MyTimeStamp," + myFeld + ").OrderBy("MyTimeStamp"));  
      
      

      Ich gluabe auch, dass ich um eine Gruppierung nicht herum komme. Aber wie soll das in Dynamic-Linq gehen?

      Gruß

      1. Tach!

        Was meinst du damit?

        Erstmal was allgemeines. Die Sprache ist C#, nicht SQL.
        Das ist klar, dass das Ganze in der C# Umgebung durchgeführt wird. Das Statement ist aber immer noch ein LINQ-Statement, woraus zur Laufzeit eine SQL-Anweisung gebildet wird.

        Richtig, LINQ ist aber immer noch C#-Code und kein SQL. Und wenn du für dieses Forum einen Code-Block erstellst, dann solltest du ihn so auszeichnen, wie der darin enthaltene Code, also lang=c (als Kompromiss) und nicht lang=sql. Und auch nicht lang=html verwenden, wenn du mich zitierst. Zitate haben hier kein Block-Tag sondern deren Zeilen fangen mit den Zitatzeichen an, so wie sie dir das Forum vorgibt.

        Ich gluabe auch, dass ich um eine Gruppierung nicht herum komme. Aber wie soll das in Dynamic-Linq gehen?

        Wenn ich nach "dynamic linq group by" suche, finde ich ein paar Lösungsvorschläge.

        dedlfix.