2010-04-29 13 views

Antwort

27

Ich gehe von 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

Verwenden Sie '> =' und '<=', um die gleichen Ergebnisse wie 'BETWEEN' zu erzielen. –

+0

Ich benutze BETWEEN nie genau aus diesem Grund. Ich bevorzuge die Explizitheit der anderen Form. – spender

+0

Für mich funktionierte das nicht LINQ to Entity error. Ich verwende auch DBContext –

5

Sie wollen es am Startdatum bis einschließlich, aber exklusiven am Enddatum. Dies ist weil ein DateTime als Datum verwendet wird, ist wirklich der Anfang dieses Tages und erstreckt sich nicht bis zum Ende des Tages.

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

Auch wenn Sie bestimmte DateTime Werte verwenden, kann es immer noch wichtig sein >= und < zu verwenden, anstatt >= und <= oder > und <.

Wenn Sie beide "oder" -Zeichen verwendet haben, dann enthalten zwei Datumsbereiche von X bis Y und von Y bis Z Datensätze, die exakt mit Y übereinstimmen. Je nach Ihren Anforderungen könnte es ein schwerwiegender Fehler sein, den Datensatz aufzunehmen in beiden Zeiträumen. Wenn Sie > und < verwenden, würden Sie in beiden Datumsbereichen Datensätze ausschließen, die exakt mit Y übereinstimmen.

Verwandte Themen