如何比较和搜索字符串和日期时间c#

如何比较和搜索字符串和日期时间c#,c#,asp.net-mvc,linq,datetime,C#,Asp.net Mvc,Linq,Datetime,我使用比较字符串创建了一个简单的搜索,如: articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.Title.Contains(searchWord) }, a => a.ArticleCategory); articles=\u service.ArticleRepository.GetAll(id,新表达式[]{x=>

我使用比较字符串创建了一个简单的搜索,如:

articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.Title.Contains(searchWord) }, a => a.ArticleCategory);
articles=\u service.ArticleRepository.GetAll(id,新表达式[]{x=>x.Title.Contains(searchWord)},a=>a.articleCography);
工作出色;但我想在datetime(date)中搜索,我写了不同的代码:

articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.InsertDate ==DateTime.Parse(searchWord) }, a => a.ArticleCategory);
articles=\u service.ArticleRepository.GetAll(id,新表达式[]{x=>x.InsertDate==DateTime.Parse(searchWord)},a=>a.articleCography);

articles=\u service.articlerestorage.GetAll(id,新表达式[]{x=>x.InsertDate.ToString(“yyyyMMdd”).Contains(searchWord)},a=>a.articleCography);
给我一个错误:

LINQ to实体无法识别方法“System.DateTime” Parse(System.String)“”方法,无法转换此方法 转换为存储表达式

从此行开始,int count=_db.count()


如何通过以字符串形式输入日期(不同格式,如:2017/8/5或05/05/2017或2017-8-5或…)或甚至输入数字(搜索所有有数字的日期)来比较字符串和日期?

您需要在查询之外进行转换:

var date=DateTime.Parse(searchWord);
articles = _service.ArticleRepository.GetAll(id, new Expression<Func<Article, bool>>[] { x => x.InsertDate ==date }, a => a.ArticleCategory);
var date=DateTime.Parse(searchWord);
articles=_service.ArticleRepository.GetAll(id,新表达式[]{x=>x.InsertDate==date},a=>a.articleCography);

执行LINQ查询时,它将转换为等效的SQL语句是一种C#方法,它将字符串转换为相应的日期时间。没有相应的SQL等价物来执行此操作

您需要在LINQ查询之前创建DateTime对象并使用它

var d = DateTime.Parse(searchWord);
var result= someEntityCollection.Where(a =>a.CreatedTime==d));
如果
CreatedTime
DateTime
字段,则比较也将包括时间戳。这意味着,它不会简单地给出那个日期的记录,而是那个日期和那个特定的时间部分

如果您试图筛选特定日期(无时间)的记录,可以使用
DbFunctions.TruncateTime
helper方法进行筛选

var d = DateTime.Parse(searchWord);
var result= someEntityCollection.Where(a => 
          DbFunctions.TruncateTime(a.CreatedTime)== DbFunctions.TruncateTime(d.Date))
DbFunctions.TruncateTime
helper方法在
System.Data.Entity
命名空间中定义。因此,请确保您有一个using语句来使用它

using System.Data.Entity;
此外,使用
DateTime.ParseExact
TryParseExact
格式比使用
DateTime.Parse更安全

var d = DateTime.ParseExact(searchWord, "dd/MM/yyyy", CultureInfo.InvariantCulture);
var d = DateTime.ParseExact(searchWord, "dd/MM/yyyy", CultureInfo.InvariantCulture);