2010-04-29 69 views

Trả lời

27

Tôi giả sử 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

Sử dụng '> =' và '<=' để cung cấp kết quả giống như 'BETWEEN'. –

+0

Tôi không bao giờ sử dụng GIỮA vì lý do chính xác này. Tôi thích sự giải thích của hình thức khác. – spender

+0

Đối với tôi điều này đã không làm việc có lỗi LINQ to Entity. Tôi cũng đang sử dụng DBContext –

5

Bạn sẽ muốn nó được bao gồm vào ngày bắt đầu, nhưng độc quyền hành kể từ ngày kết thúc. Điều này là do DateTime được sử dụng làm ngày thực sự là khởi đầu của ngày đó và không kéo dài đến cuối ngày.

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

Thậm chí nếu bạn đang sử dụng DateTime giá trị cụ thể, nó vẫn có thể quan trọng để sử dụng >=<, chứ không phải là >=<= hoặc ><.

Nếu bạn sử dụng cả hai dấu "hoặc bằng", thì hai phạm vi ngày từ X đến Y và từ Y đến Z sẽ bao gồm cả các bản ghi khớp chính xác với Y. Tùy thuộc vào yêu cầu của bạn có thể là một lỗ hổng nghiêm trọng để bao gồm bản ghi trong cả hai phạm vi ngày. Tương tự, nếu bạn sử dụng ><, bạn sẽ loại trừ các bản ghi khớp chính xác Y từ cả hai phạm vi ngày.

Các vấn đề liên quan