编辑2:经过多次评论,希望这是您所追求的结果
public IList<Car> GetCarsAvailable(DateTime fromDate, DateTime toDate)
{
var result = from c in dataContext.Cars
where !c.Bookings.Any(b => (fromDate >= b.From && fromDate <= b.To) || (toDate >= b.From && toDate <= b.To))
select c;
return result.ToList();
}
编辑 1
如果我们稍微改变它,而不是检查生日,我们将检查favourite days
. 不要让我们假设一个人可以有多个最喜欢的日子,并且我们要选择没有最喜欢的日子的每个人,即 2 天内。让我们进一步写出我们的假设:
Richard
最喜欢的日子是,5 May 2012
和10 September 2012
Amy
最喜欢的日子是,8 August 2012
和12 December 2012
Matthews
' 最喜欢的日子是,30 October 2012
1 May 2012
假设我们想找到在和之间没有最喜欢的一天的每个人1 September 2012
;我们的结果输出应该只有Matthew
,我们可以写:
public IList<Person> GetPeopleWhoDontHaveAnyFavouriteDate(DateTime fromDate, DateTime toDate)
{
var result = from p in dataContext.People
where !p.FavouriteDates.Any(f => f.Date >= fromDate && f.Date <= toDate)
select p;
return result.ToList();
}
上述声明的意思是,我们要选择所有人,但前提none
是他们最喜欢的日期在两个日期之间。
或者我们可以说,让我们选择一个人,如果他们确实有一个范围之外的日期。所以假设我们想要检查 from1 May 2012
到1 November 2012
,所以我们的结果集是 nowRichard
和Amy
,可以这样实现:
public IList<Person> GetPeopleWhoDontHaveFavouriteDate(DateTime fromDate, DateTime toDate)
{
var result = from p in dataContext.People
where p.FavouriteDates.Any(f => f.Date < fromDate || f.Date > toDate)
select p;
return result.ToList();
}
原来的
我发现阅读你的缩写变量很棘手,所以我希望你不介意,但我想我会写一个快速演示如何做一个“不在”两个日期之间。
我认为你在事情上是正确的。您可以通过以下几种方法来解决它。以下方法做同样的事情,但检查逆向。
public IList<Person> GetPeopleNotBornFromTo(DateTime fromDate, DateTime toDate)
{
var result = from p in dataContext.People
where p.DateOfBirth < fromDate || p.DateOfBirth > toDate
select p;
return result.ToList();
}
public IList<Person> GetPeopleNotBornFromTo2(DateTime fromDate, DateTime toDate)
{
var result = from p in dataContext.People
where !(p.DateOfBirth >= fromDate && p.DateOfBirth <= toDate)
select p;
return result.ToList();
}