2016-08-11 14 views
0

私はMyDateが今日またはtomarrowであるDataBaseからリストを取得したいと思います。
私は次のコードを書いています。DbFunctions DiffDaysが間違った答えを返します

_Log("Now: " + DateTime.Now.ToString()); 

var v = db_TS.TS_Test.Where(x => DbFunctions.DiffDays(x.MyDate,DateTime.Now) < 2); 
foreach (var item in v.ToList()) 
{ 
    _Log("MyDate: " + item.MyDate.ToString()); 
} 

以下が記録されます。今すぐ

:2016年11月8日10時50分00秒
いるMyDate:27/09/2017午前9時35分00秒

に私を助けてくださいコード内で何が間違っているのか調べる
ありがとう

答えて

0

最も簡単な方法は、年月日を現在の日付で確認することです。月と年は同じでなければなりません。日が少ない明日のために今日一日で同じである必要があります:

としては、この単純なシナリオでは、エッジケースでは動作しません指摘

var v = db_TS.TS_Test.Where(x => x.MyDate.Year == DateTime.Now.Year && 
           x.MyDate.Month == DateTime.Now.Month && 
           x.MyDate.Day >= DateTime.Now.Day - 1); 

編集を。

より良いオプションは、今日から日付を減算し、結果を日数で確認することです。明日の場合は、今日の場合は1日か0日です。

var v = db_TS.TS_Test.Where(x => DateTime.Now.Subtract(x.MyDate).Days <= 1); 
+0

をすることができます私はこの意志を考えます年の境界で失敗するy。 –

+0

@AdamVあなたは絶対に正しいです。私はより堅牢なソリューションを追加しました。誰かがアイデアを使い、それを改善したい場合は、古いものを残しておきます。 – PiotrWolkowski

0

datediffの機能の詳細をここから確認してください。

  • 構文

    - DATEDIFF(日付要素、STARTDATE、終了日)

    - 使用例

    SELECT DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDiff 
    SELECT DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDiff 
    SELECT DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDiff 
    SELECT DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDiff 
    SELECT DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDiff 
    

あなたはplay with here

関連する問題