如何比较和搜索字符串和日期时间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语句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);