簡體   English   中英

使用where子句在linq查詢中將字符串轉換為DateTime?

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

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