2010-04-29 25 views

cevap

27

C# varsayalım.

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

'' = 've' <= 'tuşlarını kullanarak 'BETWEEN' ile aynı sonuçları verin. –

+0

Kesinlikle bu nedenle BETWEEN kullanmayın. Diğer formun açıklığını tercih ederim. – spender

+0

Benim için bu işe yaramadı Entity hatası LINQ var. Ayrıca DBContext –

5

Bunu başlangıç ​​tarihinde kapsayıcı olmak isteyecektir, ama münhasır . Bunun nedeni, tarih olarak kullanılan DateTime'un o günün gerçekten başlangıcı olması ve günün sonuna kadar uzanmamasıdır. Belirli DateTime değerleri kullanarak bile >= ve < yerine >= ve <= veya > ve < kullanmak

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

, hala önemli olabilir.

Hem "hem de eşit" işaretleri kullandıysanız, iki tarih aralığı X'den Y'ye ve Y'den Z'ye kadar her ikisi de tam olarak Y ile eşleşen kayıtları içerir. Gereksinimlerinize bağlı olarak bu kayda eklenmesi ciddi bir kusur olabilir. her iki tarih aralığında. Benzer şekilde, > ve < kullanırsanız, her iki tarih aralığındaki Y ile tam olarak eşleşen kayıtları hariç tutarsınız.

İlgili konular