1

日付が開始と終了の 2 つのフィールドの間にあるレコードがある場合、結果を取得しようとしています。私が持っているlinqクエリは結果を返していないようです:

var alerts = from q in db.AlertMsgs 
             where (q.Start >= DateTime.Now
             && q.Finish <= DateTime.Now)
             select q;

これがなぜなのかについての提案はありますか?私も試してみました

var alerts = from q in AlertMsgs.Where(q => q.Start.CompareTo(DateTime.Now) > 0
&& q.Finish.CompareTo(DateTime.Now) < 1)
 select q;

運もありません。

4

1 に答える 1

2

条件が逆になっています。試す:

var alerts = from q in db.AlertMsgs 
             where (q.Start < DateTime.Now && q.Finish > DateTime.Now) 
             select q;

または、メソッド構文を使用して (および<=/ >=、その比較が必要な場合):

var alerts = db.AlertMsgs
               .Where(q => q.Start <= DateTime.Now && q.Finish >= DateTime.Now);

これにより、開始済み ( Start < Now) で未終了 ( Finish > Now) のすべてのメッセージが表示されます。あなたが探していたのは、まだ開始されていない (またはまさに今開始された) が、既に終了している (またはちょうど今終了した) メッセージでした。これは、開始時刻と終了時刻が同じで、両方の時刻が正確に一致するアイテムのみを返しますDateTime.Now

于 2013-01-22T19:22:00.427 に答える