Entonces, se está desplazando hacia abajo porque las Respuestas no funcionan:
Esto funciona como magia (pero dicen que tiene problemas de eficiencia para big data, y a ti no te importa como a mí)
1- El tipo de datos en la base de datos es "datetime" y "anulable" en mi caso.
El formato de datos de ejemplo en DB es como:
2018-11-06 15:33:43.640
Un en C # cuando se convierte en cadena es como:
2019-01-03 4:45:16 PM
Entonces el formato es:
yyyy/MM/dd hh:mm:ss tt
2- Por lo tanto, primero debe preparar sus variables de fecha y hora en el formato adecuado:
Ejemplo 1
yourDate.ToString("yyyy/MM/dd hh:mm:ss tt")
Ejemplo 2: intervalo de fecha y hora de los últimos 30 días
DateTime dateStart = DateTime.Now.AddDays(-30);
DateTime dateEnd = DateTime.Now.AddDays(1).AddTicks(-1);
3- Finalmente la consulta linq que perdiste tu día tratando de encontrar (Requiere EF 6)
using System.Data.Entity;
_dbContext.Shipments.Where(s => (DbFunctions.TruncateTime(s.Created_at.Value) >= dateStart && DbFunctions.TruncateTime(s.Created_at.Value) <= dateEnd)).Count();
Para tener en cuenta la comparación de tiempos también:
(DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) >= dateStart && DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) <= dateEnd)
Tenga en cuenta que el siguiente método mencionado en otras preguntas y respuestas de stackoverflow no funcionará correctamente:
....
&&
(
s.Created_at.Value.Day >= dateStart.Day && s.Created_at.Value.Day <= dateEnd.Day &&
s.Created_at.Value.Month >= dateStart.Month && s.Created_at.Value.Month <= dateEnd.Month &&
s.Created_at.Value.Year >= dateStart.Year && s.Created_at.Value.Year <= dateEnd.Year
)).count();
Si el día de inicio fue en este mes, por ejemplo, y el día de finalización es en el mes siguiente, la consulta devolverá falso y ningún resultado, por ejemplo:
DatabaseCreatedAtItemThatWeWant = 2018/12/05
startDate = 2018/12/01
EndDate = 2019/01/04
la consulta siempre buscará días entre 01 y 04 sin tener en cuenta el "mes", por lo que "s.Created_at.Value.Day <= dateEnd.Day" fallará
Y en caso de que tenga realmente grandes datos, ejecutaría Native SQL Query en lugar de linq
...
... where Shipments.Created_at BETWEEN CAST(@Created_at_from as datetime) AND CAST(@Created_at_to as datetime))
....
Gracias