Ho un esempio in SQL su come utilizzare la stessa logica in Linq su Entity?Come cercare tra due date in LINQ su Entity?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
Ho un esempio in SQL su come utilizzare la stessa logica in Linq su Entity?Come cercare tra due date in LINQ su Entity?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
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);
//...
}
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.
Usa '> =' e '<=' per dare gli stessi risultati di 'BETWEEN', però. –
Non uso mai TRA ESEMPIO esattamente per questo motivo. Preferisco l'esplicita dell'altra forma. – spender
Per me questo non ha funzionato ha ottenuto l'errore di entità LINQ. Sto anche usando DBContext –