2

这是我的查询:

var model = (from p in entity.vehicule
             join y in entity.indisponible on p.Matv equals y.idv
             where p.agence.idgov == idv && (!(dd1 >= y.Dd && dd1 <= y.Df) || !(df1 >= y.Dd && df1 <= y.Df))
             select p).ToList();

我尝试了很多方法来编写这部分:

(!(dd1 >= y.Dd && dd1 <= y.Df) || !(df1 >= y.Dd && df1 <= y.Df))

以这种方式(这就是它在 sql 中的外观):

(dd1 Not Between Date(y.dd) And Date(y.dF)) OR (df1 Not Between Date(y.dd) And Date(y.df))

dd1 是日期(从),Df1 是日期(到)。

我想我在这里遗漏了一些东西:(

4

1 回答 1

5

编辑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 201210 September 2012
  • Amy最喜欢的日子是,8 August 201212 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 20121 November 2012,所以我们的结果集是 nowRichardAmy,可以这样实现:

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();
}
于 2012-04-27T13:51:17.733 回答