[英]How can i compare and seach string and datetime c#
我使用比較字符串創建一個簡單的搜索:
articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.Title.Contains(searchWord) }, a => a.ArticleCategory);
並且工作正常; 但我想在datetime(日期)搜索,我寫了不同的代碼:
articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.InsertDate ==DateTime.Parse(searchWord) }, a => a.ArticleCategory);
要么
articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.InsertDate.ToString("yyyyMMdd").Contains(searchWord) }, a => a.ArticleCategory);
給我一個錯誤:
LINQ to Entities無法識別方法'System.DateTime Parse(System.String)'方法,並且此方法無法轉換為存儲表達式。
從這一行開始int count = _db.Count();
如何通過輸入日期作為字符串(以不同的格式,如:2017/8/5或05/05/2017或2017-8-5或......)或甚至輸入數字來比較字符串和日期之間的操作(搜索所有有號碼的日期)?
執行LINQ查詢時,它將轉換為等效的SQL語句。 DateTime.Parse
是一個C#方法,它將字符串轉換為它對應的DateTime。 沒有相應的SQL等效項。
您需要在LINQ查詢之前創建一個DateTime對象並使用它。
var d = DateTime.Parse(searchWord);
var result= someEntityCollection.Where(a =>a.CreatedTime==d));
如果CreatedTime
是DateTime
字段,則比較也將包括時間戳 。 這意味着,它不會簡單地給出該日期的記錄,而是該日期和特定時間部分
如果您嘗試過濾特定日期的記錄( 沒有時間 ),您可以使用DbFunctions.TruncateTime
幫助程序方法來執行此操作
var d = DateTime.Parse(searchWord);
var result= someEntityCollection.Where(a =>
DbFunctions.TruncateTime(a.CreatedTime)== DbFunctions.TruncateTime(d.Date))
DbFunctions.TruncateTime
幫助器方法在System.Data.Entity
命名空間內定義。 因此,請確保您使用using語句。
using System.Data.Entity;
使用DateTime.ParseExact
或TryParseExact
與格式比使用DateTime.Parse
var d = DateTime.ParseExact(searchWord, "dd/MM/yyyy", CultureInfo.InvariantCulture);
您需要在查詢之外進行轉換:
var date=DateTime.Parse(searchWord);
articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.InsertDate ==date }, a => a.ArticleCategory);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.