簡體   English   中英

如何將 SQL 服務器中的 varchar(20) 轉換為 C# 中的日期時間?

[英]How do I convert varchar(20) in SQL Server to datetime in C#?

我將日期作為varchar存儲在 SQL 服務器中,因此它們通過實體框架成為 C# 中的字符串。

然后我嘗試將其轉換為日期,但代碼引發異常。

在 SQL 服務器中:

CREATE TABLE [dbo].[Achievements]
(
      ...   
      [DatePerformance] [VARCHAR](20) NULL, 
)

日期以這種格式存儲:“25/04/2019”

在 C# 中:

public static School_LPEntities db = new School_LPEntities();

我試過了:

List<Achievements> res = db.Achievements.Where(x =>  DateTime.Parse(x.DatePerformance) <= DateTime.Today.Date).ToList();

和:

List<Achievements> res = db.Achievements.Where(x =>   DateTime.ParseExact(x.DatePerformance, "dd/MM/yyyy",
 CultureInfo.InvariantCulture) <= DateTime.Today.Date).ToList();

代碼拋出:

System.NotSupportedException:“LINQ to Entities 無法識別方法“System.DateTime Parse(System.String)”方法,並且此方法無法轉換為存儲表達式。

正如其他人在評論中所說,在 SQL 中將日期存儲為 varchar 的充分理由的數量為零。

你說:

因此它們通過實體框架成為 C# 中的字符串

一旦您在 C# 中獲得日期,您無論如何都可以使用.ToString()輕松完成此操作。

但是......至於您的具體錯誤,它告訴您的是您不能在實體框架 LINQ 語句中使用此方法。 最好將 LINQ 語句視為查詢。 因為,事實上,它需要能夠將您的 LINQ 語句轉換為實際的 SQL 查詢。 您不能在 SQL 查詢中使用DateTime.Parse() ,因此會引發此錯誤。

如果您真的必須將日期作為 varchar 存儲在數據庫中(同樣,這是一個糟糕的主意),那么我看不到一個真正簡單的解決方案。 順便說一句,我會告訴你首先,創建你的列表,然后循環遍歷它:

List<Achievements> res = db.Achievements.ToList();

然后:

foreach (var achievement in res)
{
   if (DateTime.Parse(achievement.DatePerformance)  <= DateTime.Today.Date)
   {
       // do something here
   }
}

但這是解決真正解決方案的一種非常笨拙的方法:只需將您的日期存儲為日期!

暫無
暫無

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

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