我在SQL中有一个例子如何在Linq to Entity中使用相同的逻辑?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
答案 0 :(得分:32)
我假设是C#。
DateTime startDate=bla;
DateTime endDate=blabla;
using(var db=new MyDataContext())
{
var filteredData=db.TABLE.Where(t => t.DATE > startDate && t.DATE < endDate);
//...
}
答案 1 :(得分:10)
您希望它在开始日期包含在内,但在结束日期独占。这是因为用作日期的DateTime
实际上是当天的开始,并且不会延伸到当天结束。
// 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)
即使您使用的是特定DateTime
值,使用>=
和<
,而不是>=
和<=
或{仍然很重要{1}}和>
。
如果同时使用<
和>=
符号,那么从X到Y和Y到Z的两个日期范围都包含与Y完全匹配的记录。根据您的要求,它可能是严重的缺陷,包括两个日期范围内的记录。同样,如果您使用<=
和>
,则应该从与Y完全匹配的两个日期范围中排除记录。