如何在LINQ to Entity中的两个日期之间进行搜索?

时间:2010-04-29 17:38:07

标签: .net linq linq-to-entities

我在SQL中有一个例子如何在Linq to Entity中使用相同的逻辑?

SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE 

2 个答案:

答案 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完全匹配的两个日期范围中排除记录。