[英]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.