2017-04-25 39 views
1

我嘗試使用EF獲取用戶列表。我有一個在表中提交的返回日期爲字符串數據類型。現在我比較這個返回日期到今天的日期,然後我得到error.so任何一個想法如何能夠將字符串轉換爲日期時間在C#中。將字符串轉換爲帶有where子句的linq查詢中的DateTime?

這裏的查詢:

var res = db.users 
    .Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now) 
    .ToList(); // but here not getting list 

因此,可能在EF字符串日期時間轉換。如果有人有一個想法,請讓我知道。

+1

'a.returndate'的價值是什麼? –

+0

DD-MM-YYYY這種格式它的商店 – coderwill

+0

不應該是DD-MM-YYYY而不是DD-MM-YYY嗎? –

回答

1

根據您的意見,問你需要做的

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本身。這種方式帶來的價值,你不必重複的代碼。

+0

您確定這可以工作嗎?使用LINQ到實體? – Ryan

+0

LINQ to Entities不識別方法'System.DateTime ParseExact(System.String,System.String,System.IFormatProvider)'方法,並且此方法不能轉換爲存儲表達式。我得到這個錯誤。 – coderwill

+0

@downvoter:更新了答案。 –

0

試試這個:

var res = db.users.where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.now).ToList(); 
+0

'DateTime.ParseExact'不會被翻譯成sql語句 – fubo

-1

試試這個

DateTime date = Convert.ToDateTime(db.users.Select(a => a.returndate).FirstOrDefault()); 
var res = db.users.Where(a => date > DateTime.Now).ToList(); 
+1

這完全不起作用,你不能在lambda範圍之外訪問'a'。 – Dirk

+0

對不起,我最近沒有正確回答我更新我的答案嘗試。如果你想要多個記錄,然後使用foreach循環。 – PixelDev

1

LINQ to Entities不能使用Convert.ToDatetime方法,所以首先從數據庫,然後在列表

var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.Now).ToList(); 

使用方法獲取數據注意:如果您可以更改您的columns data typeDateTime類型,那麼你可以在比較LINQ To Entities他們,否則你應該做如上

+0

與您的解決方案我越來越像這個錯誤'字符串未被識別爲有效的日期時間'。 – coderwill

+0

我編輯了我的答案,試試這個格式爲 –

+1

獲取整個表格來過濾應用程序內的數據是不好的做法 – fubo

0

隨着當前模式就只能得到所有對象的列表,然後過濾。

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也以正確的方式更新了他的答案。 )

+0

你可以請給我提示怎麼可以這樣做 – coderwill

+0

是的這波是正確的,但在我的表很多的數據是存儲,以便這個查詢它的工作非常緩慢,所以任何其他解決方案? – coderwill

+0

我提到 - 將字段類型更改爲datetime,唯一的方法。 – Ryan

相關問題