簡體   English   中英

我如何比較和搜索字符串和日期時間c#

[英]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));

如果CreatedTimeDateTime字段,則比較也將包括時間戳 這意味着,它不會簡單地給出該日期的記錄,而是該日期和特定時間部分

如果您嘗試過濾特定日期的記錄( 沒有時間 ),您可以使用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.ParseExactTryParseExact與格式比使用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.

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