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は日付(From)、Df1は日付(to)です。

私はここで何かが欠けていると思います:(

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が、お気に入りの日付が 2 つの日付の間にある場合に限られます。

別の言い方をすれば、範囲外の日付を持っている人を選択しましょう。from から までをチェックしたいと仮定すると1 May 20121 November 2012結果セットは now RichardandAmyになり、次のように実現できます。

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