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:
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,
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:
Das daraus erzeugte SQL-Statement liefert im SQL-Server-Management Studio die gewünschten Resultate.
Die Linq-Anweisung selber gibt aber nichts zurück. Kann jemand das nachvollziehen?
Danke im Voraus.
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
Code:
((DATEPART (day, [Extent1].[TimeStamp])) >= 31) AND ((DATEPART (day, [Extent1].[TimeStamp])) <= 2)
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()
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
Danke im Voraus.