2010-04-29 189 views

Respuesta

27

Estoy asumiendo C#.

DateTime startDate=bla; 
DateTime endDate=blabla; 
using(var db=new MyDataContext()) 
{ 
    var filteredData=db.TABLE.Where(t => t.DATE > startDate && t.DATE < endDate); 
    //... 
} 
+9

Sin embargo, use '> =' y '<=' para obtener los mismos resultados que 'BETWEEN'. –

+0

Nunca uso BETWEEN por exactamente esta razón. Prefiero lo explícito de la otra forma. – spender

+0

Para mí esto no funcionó tiene un error de LINQ to Entity. También estoy usando DBContext –

5

Usted quiere que sea incluido en la fecha de inicio, pero exclusiva en la fecha de finalización. Esto se debe a que el DateTime utilizado como fecha es realmente el comienzo de ese día y no se extiende hasta el final del día.

// dates that are inclusive on the date range 
var startDate = new DateTime(2016, 1, 1); 
var endDate = new DateTime(2016, 12, 31); 

... 

// WRONG: this will ignore data on the last day 
.Where(obj => obj.StartDate >= startDate && obj.EndDate <= endDate) 

// RIGHT: this will include the last day 
var endDateExclusive = endDate.AddDays(1); 

... 

.Where(obj => obj.StartDate >= startDate && obj.EndDate < endDateExclusive) 

Incluso si está utilizando DateTime valores específicos, que todavía puede ser importante utilizar >=< y, en lugar de >= y <= o > y <.

Si usó ambos signos "o iguales", entonces dos rangos de fechas de X a Y y de Y a Z incluirían registros que coinciden exactamente con Y. Dependiendo de sus requisitos, podría ser un error grave incluir el registro en ambos intervalos de fechas. Del mismo modo, si usa > y <, excluirá los registros que coincidan exactamente con Y de ambos intervalos de fechas.

Cuestiones relacionadas