3

特定のフィールド「名前」について、特定のレコードの表の日付範囲を指定します

以前の日付範囲の間隔内にその名前を挿入しようとした場合、それは許可されるべきではありません。

ここでいくつかのコードを試してみました...

if (dataContext.TableAs.Where(
    x => x.EndDate > StartDate &&
    x.Name == Name).Count() == 0)
{
    //insert record
}

しかし、常に成功しているわけではありません。

ここで私が見逃しているものを誰かが提案できますか?

SQL で以下のクエリを試しましたが、上記のコードに対して LINQ でそれを使用するにはどうすればよいですか

SELECT COUNT(*) FROM TableA WHERE ('2012-04-02' between StartDate and EndDate or '2012-08-28' 
between StartDate and EndDate or StartDate between '2012-04-02' and  '2012-08-28' or       EndDatebetween '2012-04-02' and  '2012-08-28' ) and Name='Test'
4

2 に答える 2

3

これを試して;

if (dataContext.TableAs
            .Where(x => x.Name == Name)
                .Max(x  => x.EndDate) < StartDate)

編集 - 質問の2番目の部分

DateTime Date1 = new DateTime("2012-04-02");
DateTime Date2 = new DateTime("2012-08-28");

var query = (dataContext.TableAs
            .Where(x => x.Name == "Test")
            .Where(x => (x.StartDate >= Date1 && Date1 <= x.EndDate)
                    || (x.StartDate >= Date2 && Date2 <= x.EndDate)
                    || (Date1 >= x.StartDate && x.StartDate <= Date2)
                    || (Date1 >= x.EndDate && x.EndDate <= Date2))).Count();
于 2012-08-29T10:12:04.447 に答える
0
var StartDate = new DateTime(2012,04,02);
var EndDate = new DateTime(2012,08,28);
var Name = "Test";

if (!dataContext.TableAs.Any(
   x=> x.Name == Name && x.EndDate >= StartDate && x.StartDate <= EndDate
)
{
    //insert record
}
于 2012-08-29T10:50:36.953 に答える