不是在 linq 到 sql 之间
本文关键字:sql 之间 linq | 更新日期: 2023-09-27 18:32:30
这是我的查询:
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 是日期(到(。
我想我在这里错过了一些东西:(
编辑 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
日期在两个日期之间。
或者我们可以说,让我们选择一个人,如果他们的日期确实超出了范围。所以假设我们想从1 May 2012
检查到1 November 2012
,所以我们的结果集现在是Richard
和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();
}