[英]convert string to DateTime in linq query with where clause?
我嘗試使用 EF 獲取用戶列表。 我在表中歸檔了一個它的返回日期作為字符串數據類型。 現在我將這個返回日期與今天的日期進行比較,然后我得到了錯誤。所以任何人都知道如何在 C# 中將字符串轉換為日期時間。
這是查詢:
var res = db.users
.Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now)
.ToList(); // but here not getting list
所以在 EF 字符串到 DateTime 轉換中是可能的。 如果有人有想法,請告訴我。
您不能在LINQ to Entities
使用Convert.ToDatetime
方法,因此首先從db獲取數據然后在列表中使用方法
var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.Now).ToList();
注意:如果您可以將columns data type
更改為DateTime
類型,則可以在LINQ To Entities
它們進行比較 ,否則您應該如上所述
根據您的意見提出疑問,您需要這樣做
var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate, "dd-MM-yyyy", CultureInfo.InvariantCulture) > DateTime.Now);
在你的情況下, Convert.ToDateTime(string str)
不能正常傳遞DateTime
格式與你的系統格式不同。
順便說一句,
.... EF字符串到DateTime的轉換。
永遠不要在數據庫中存儲DateTime字符串。 數據庫具有相應的DateTime類型,您可以在其中將信息存儲為DateTime本身。 這樣在帶來價值時你不必重復代碼。
嘗試這個 :
var res = db.users.where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.now).ToList();
使用當前架構,您只能獲取所有對象的列表,然后對其進行過濾。
Linq to Entities構造在枚舉完成時執行的SQL查詢。
所以只需獲取完整列表,然后過濾它。 或者強烈建議更改數據庫架構。
UPDATE
var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate, "dd-MM-yyyy", CultureInfo.InvariantCulture) > DateTime.Now);
但是在過濾之前加載全表。 所以你需要將你的字段類型更改為datetime。 然后ü可以使用里面簡單的比較Where
。
@NikhilAgrawal也以正確的方式更新了他的答案。 )
您可以在列表中訪問,然后應用如下過濾器 -
var users=db.users.ToList();
var res=users.Where(a=>Convert.ToDateTime(a.returndate)>DateTime.Now).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.