Announcement

Collapse
No announcement yet.

Dynamic Linq und Date-Vergleich

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamic Linq und Date-Vergleich

    Hallo Forum,

    ich arbeite momentan mit Dynamic Linq und muss ich da zwei Daten miteinander vergleichen. Das erste Datum kommt aus der Datenbank und sieht so aus "2014-07-31 03:12:00.000". Das Zweite Datum bekomme ich von den Benutzern und sieht es so uas "01.08.2014".

    Die aus meinem Linq erzeuget SQL-Anweisung sieht so aus:

    Code:
    SELECT
    [Extent1].[MyId] AS [MyId],
    [Extent1].[TimeStamp] AS [TimeStamp],
    [Extent1].[Name] AS [Name]
    FROM [dbo].[MyTable] AS [Extent1]
    WHERE (249 = [Extent1].[MyId]) AND ((DATEPART (year, [Extent1].[TimeStamp])) >= 2014) AND ((DATEPART (year, [Extent1].[TimeStamp])) <= 2014) AND
    ((DATEPART (month, [Extent1].[TimeStamp])) >= 7) AND ((DATEPART (month, [Extent1].[TimeStamp])) <= 8) AND ((DATEPART (day, [Extent1].[TimeStamp])) >= 31) AND
    ((DATEPART (day, [Extent1].[TimeStamp])) <= 2)
    ORDER BY [Extent1].[TimeStamp] ASC
    Ich Vergeliche die Daten in Einzelteilen miteinander, also Jahr == Jahr and Monat == Monat and Tag == Tag. Das ganze funktioniert auch einwandfrei, solange die Daten innerhalb eines Monats liegen. Wenn aber die Daten montasübergreifend sind, wie der letzte Teil der SQL-Anweisung oben zeigt,

    Code:
    ((DATEPART (day, [Extent1].[TimeStamp])) >= 31) AND
    ((DATEPART (day, [Extent1].[TimeStamp])) <= 2)
    bricht dann alles zusammen, also kein Ergebniss wird zurückgeliefert. Der Tag kann nicht größer 31 und kleiner 2 sein.
    Ich habe die Anweisung nun so geändert, dass die Daten direkt miteinander vergliechen werden:

    Code:
                    var chartQuery = (_db.MyTable.Where("MyId == @0 And (TimeStamp >= @1 And TimeStamp <= @2)", Id, DateFrom, DateTo)
                                      .Select("new (MyId, TimeStamp)).OrderBy("TimeStamp"));
    
                   return (IEnumerable<object>)chartQuery).ToList()
    Das daraus erzeugte SQL-Statement liefert im SQL-Server-Management Studio die gewünschten Resultate.

    Code:
    SELECT 
    [Extent1].[MyId] AS [MyId], 
    [Extent1].[TimeStamp] AS [TimeStamp], 
    FROM [dbo].[MyTable] AS [Extent1]
    WHERE (92 = [Extent1].[MyId]) AND 
    ([Extent1].[TimeStamp] >= convert(datetime2, '2014-07-31 00:00:00.0000000', 121)) AND 
    ([Extent1].[TimeStamp] <= convert(datetime2, '2014-08-01 00:00:00.0000000', 121))
    ORDER BY [Extent1].[TimeStamp] ASC
    Die Linq-Anweisung selber gibt aber nichts zurück. Kann jemand das nachvollziehen?

    Danke im Voraus.
    Zuletzt editiert von Smart; 10.10.2014, 14:09.
Working...
X