Tôi có một ví dụ trong SQL làm thế nào để sử dụng cùng một logic trong LINQ to Entity?Cách tìm kiếm giữa hai ngày trong LINQ to Entity?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
Tôi có một ví dụ trong SQL làm thế nào để sử dụng cùng một logic trong LINQ to Entity?Cách tìm kiếm giữa hai ngày trong LINQ to Entity?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
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);
//...
}
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 >=
và <
, chứ không phải là >=
và <=
hoặc >
và <
.
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 >
và <
, 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.
Sử dụng '> =' và '<=' để cung cấp kết quả giống như 'BETWEEN'. –
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
Đố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 –