編集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
が、お気に入りの日付が 2 つの日付の間にある場合に限られます。
別の言い方をすれば、範囲外の日付を持っている人を選択しましょう。from から までをチェックしたいと仮定すると1 May 2012
、1 November 2012
結果セットは now Richard
andAmy
になり、次のように実現できます。
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();
}
オリジナル
省略された変数を読むのは難しいことがわかったので、気にしないでいただければ幸いですが、2つの日付の「間ではない」を行う方法の簡単なデモを書きたいと思いました。
あなたは正しい方向に進んでいると思います。ここにあなたがそれに近づくことができるいくつかの方法があります. 次のメソッドは同じことを行いますが、逆をチェックします。
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();
}