tres - diff fechas c#
¿Cómo realizo la comparación de fechas en la consulta EF? (11)
Por favor ayuda. Estoy intentando descubrir cómo usar DATE o DATETIME para comparar en una consulta de linq.
Ejemplo: si quisiera todos los nombres de empleados para aquellos que comenzaron antes de hoy, haría algo como esto en SQL:
SELECT EmployeeNameColumn
FROM EmployeeTable
WHERE StartDateColumn.Date <= GETDATE() //Today
¿Pero qué hay de linq?
DateTime startDT = //Today
var EmployeeName =
from e in db.employee
where e.StartDateColumn <= startDT
El DONDE anterior no funciona:
Detalles de la excepción: System.NotSupportedException: el miembro de tipo especificado ''Fecha'' no es compatible con LINQ to Entities. Solo se admiten inicializadores, miembros de entidades y propiedades de navegación de entidades.
.Fecha no funcionó, pero .Day hizo por mí.
var query = from o in Payments
where o.Order.OrderDate.Day != o.PaymentDate.Day
orderby o.Order.OrderDate
select new
{
o.Order.OrderID,
o.Order.OrderDate,
o.PaymentDate,
o.Order.FirstName,
o.Order.LastName,
o.Order.CustomerID
};
query.Dump();
Eso debería funcionar. ¿Estás seguro de que no hay otra parte de la consulta que activó la excepción? Tengo varias instancias de consultas de la forma
var query = from e in db.MyTable
where e.AsOfDate <= DateTime.Now.Date
select e;
en mi código
Estoy usando un LinqDataSource y tuve problemas para que mi consulta con una Comparación de fechas se ejecute sin errores. La respuesta es usar la función WhereAddParameters y agregar el valor de prueba como un parámetro fuertemente tipado.
Vea el ejemplo a continuación donde estoy haciendo coincidir un groupid y verificando si el StopDate en mi registro es mayor o igual a un sello de fecha / hora de ahora.
Estoy usando este fragmento de código actualmente y funciona como un encanto.
LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString())
LinqCampaigns.Where = "GroupId = " & myGrp & " && " & "StopDate >= @StopDate"
Funciona de maravilla....
No puedes usar .Fecha
Si desea verificar hoy, puede crear una fecha y hora sin tiempo
DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
var e = (from mds in myEntities.Table
where mds.CreateDateTime >= myDate
select mds).FirstOrDefault();
Puede ser debido a la fecha en la base de datos que puede contener nulos. Prueba esto:
var EmployeeName =
from e in db.employee
where e.StartDateColumn.Value <= startDT
Puede verificar la condición de esta manera
var nextDay = DateTime.Today.AddDays(1);
var query = from e in db.MyTable
where e.AsOfDate >= DateTime.Today && e.AsOfDate < nextDay
select e;
aquí obtendrás los registros en la fecha de AsOfDate mientras revisamos entre hoy (00:00:00) y mañana (00:00:00) obtendremos el registro de la fecha de hoy solo en lo que pueda ser el momento ...
Tengo curiosidad por el mensaje de error que dice ''Date''
, cuando estás pasando un ''DateTime''
. ¿Podría ser que ''StartDateColumn''
es realmente una ''Date''
, en lugar de un ''DateTime''
en la base de datos? Eso podría estropear la comparación ...
Use la clase DbFunctions
para recortar la porción de tiempo.
using System.Data.Entity;
var bla = (from log in context.Contacts
where DbFunctions.TruncateTime(log.ModifiedDate)
== DbFunctions.TruncateTime(today.Date)
select log).FirstOrDefault();
asegúrese de verificar el valor nulo así:
''(from mm in _db.Calls
where mm.Professionnal.ID.Equals(proid)
&& mm.ComposedDate.HasValue &&
(mm.ComposedDate.Value >= datemin) && (mm.ComposedDate.Value <= date)
select mm).ToArray();''
prueba esto:
DateTime dd = DateTime.Parse("08/13/2010 00:00:00");
var data = from n in ContributionEligibilities
where n.ModifiedDateTime.Date >= DateTime.Parse("08/13/2010").Date
select n;
data.Dump("Result") ;
use una variable local para almacenar el valor de Fecha y luego use esa variable en la consulta:
DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme