簡體   English   中英

不同的日期時間格式在 EF Core 和 LINQ 中返回錯誤的結果集。 DateTime.ParseExact 不起作用

[英]Different datetime format returns wrong result set in EF Core and LINQ. DateTime.ParseExact does not work

我有一個 ASP.NET Core MVC 應用程序,其文化設置為en-GB ,使用日期時間格式dd/mm/yyyy

我在用:

  • .NET 核心2.1
  • EF 核心 2.2
  • SQL 服務器 2019 (v15)
  • 日期列的類型為datetime2

但是,對於我的一個查詢,在通過 EF Core 查詢時,我需要日期格式為yyyy-mm-dd

var xyx = db.zyz
            .Where(x => x.date >= startdate && x.date<= enddate)
            ......

上面的查詢即使按照條件在zyz表中有一條記錄,也無法返回結果集。

我認為只有當 startdate 和 enddate 相同時才會發生這種情況。

例如,假設 zyz 的記錄日期為2020-04-19

詢問

   var dt = DateTime.ParseExact("20200419","yyyyMMdd",CultureInfo.InvariantCulture);

    var xyx = db.zyz
                .Where(x=>x.date >= dt && x.date<= dt)
                ......

這無法獲取任何行。 它返回 0 行。

我認為這是因為日期時間格式。

db 中 zyz 中的日期字段格式2020-19-04 00:00:00.0000000

想到兩個問題:

  • 這是因為我沒有得到結果的日期時間格式嗎? EF Core 不處理格式嗎?
  • 當我使用ParseExact和其他方法將日期解析為我想要的格式時。 這沒用。 我總是以dd/mm/yyyy格式獲取日期。

我嘗試過解析日期:

var dt = DateTime.ParseExact("20200415","yyyyMMdd",CultureInfo.InvariantCulture);

DateTime theTime = DateTime.ParseExact("20200415",
                                        "yyyyMMdd",
                                        CultureInfo.InvariantCulture,
                                        DateTimeStyles.None);

var dts = DateTime.ParseExact("20200415", "yyyyMMdd",new CultureInfo("en-ZA"));

上述查詢始終返回格式為19/04/2020 00:00:00的日期

據我了解,由於 datetime 只是一種數據類型,因此查詢不應該獨立於 datetime 格式並返回數據而不考慮 datetime 格式嗎?

大家好,查詢本身是錯誤的。

什么問題:

如果開始日期和結束日期相同:

var xyx = db.zyz
            .Where(x => x.date >= startdate && x.date<= enddate)
            ......

我正在發送:

2020-04-19 00:00:00 雙方

我不得不發送:

2020-04-19 00:00:00 - 開始日期2020-04-19 11:59:00 - 結束日期

正如Ivan StoevStefano Balzarotti在評論中指出的那樣。

寫了這個答案,因為它清楚地表明 datetime 是一種類型,並且沒有Jon Skeet在評論中指出的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM