2010-04-29 3 views

risposta

27

Sto assumendo 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

Usa '> =' e '<=' per dare gli stessi risultati di 'BETWEEN', però. –

+0

Non uso mai TRA ESEMPIO esattamente per questo motivo. Preferisco l'esplicita dell'altra forma. – spender

+0

Per me questo non ha funzionato ha ottenuto l'errore di entità LINQ. Sto anche usando DBContext –

5

Si vuole che sia inclusiva sulla data di inizio, ma esclusiva alla data di fine. Questo perché un DateTime usato come una data è davvero l'inizio di quel giorno e non si estende fino alla fine della giornata.

// 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) 

Anche se si sta utilizzando specifici DateTime valori, può ancora essere importante utilizzare >= e <, piuttosto che >= e <= o > e <.

Se si utilizzavano entrambi i segni "o uguale", due intervalli di date da X a Y e da Y a Z includevano entrambi i record che corrispondono esattamente a Y. A seconda delle esigenze, potrebbe essere un difetto grave includere il record in entrambi gli intervalli di date. Allo stesso modo, se si utilizza > e <, si escludono i record che corrispondono esattamente a Y da entrambi gli intervalli di date.