C# 如何在Contains方法中格式化Datetime列
我的数据库表名为C# 如何在Contains方法中格式化Datetime列,c#,entity-framework,linq,C#,Entity Framework,Linq,我的数据库表名为缺勤,其中有一列名为ABSDate。此列的类型为Datetime 我正在尝试使用LINQ查询在此表内搜索。当我使用Contains方法查询其他列时,我会得到以下结果: 工作查询 dataGridView1.DataSource = (from A in context.Absence join S in context.Stagiaire on A.STG equals S.ID join G in context.Groupe on S.GRP equals
缺勤
,其中有一列名为ABSDate
。此列的类型为Datetime
我正在尝试使用LINQ查询在此表内搜索。当我使用Contains
方法查询其他列时,我会得到以下结果:
工作查询
dataGridView1.DataSource = (from A in context.Absence
join S in context.Stagiaire on A.STG equals S.ID
join G in context.Groupe on S.GRP equals G.CODE
join F in context.FILERE on G.FL equals F.CODE
select new { A.ID, A.ABSDate, A.STG, S.Nom, S.Prenom, S.GRP, G.FL })
.Where(X => X.STG.Contains(SearchBox.Text) ||
X.Nom.Contains(SearchBox.Text) ||
X.Prenom.Contains(SearchBox.Text) ||
X.GRP.Contains(SearchBox.Text))
.Select(x => new { x.ID, Date = x.ABSDate, x.Nom, Prénom = x.Prenom, Filiére = x.FL, Groupe = x.GRP })
.ToList();
dataGridView1.DataSource = (from A in context.Absence
join S in context.Stagiaire on A.STG equals S.ID
join G in context.Groupe on S.GRP equals G.CODE
join F in context.FILERE on G.FL equals F.CODE
select new { A.ID, A.ABSDate, A.STG, S.Nom, S.Prenom, S.GRP, G.FL })
.Where(X => X.STG.Contains(SearchBox.Text) ||
X.Nom.Contains(SearchBox.Text) ||
X.Prenom.Contains(SearchBox.Text) ||
X.GRP.Contains(SearchBox.Text) ||
X.ABSDate.ToString("dd/MM/yyyy hh:mm").Contains(SearchBox.Text))
.Select(x => new { x.ID, Date = x.ABSDate, x.Nom, Prénom = x.Prenom, Filiére = x.FL, Groupe = x.GRP })
.ToList();
但是,当我使用ABSDate
作为查询的一部分时,会出现以下错误:
System.NotSupportedException:“LINQ to实体无法识别
方法'System.String ToString(System.String)'和此方法
无法转换为存储表达式。'
断开的查询
dataGridView1.DataSource = (from A in context.Absence
join S in context.Stagiaire on A.STG equals S.ID
join G in context.Groupe on S.GRP equals G.CODE
join F in context.FILERE on G.FL equals F.CODE
select new { A.ID, A.ABSDate, A.STG, S.Nom, S.Prenom, S.GRP, G.FL })
.Where(X => X.STG.Contains(SearchBox.Text) ||
X.Nom.Contains(SearchBox.Text) ||
X.Prenom.Contains(SearchBox.Text) ||
X.GRP.Contains(SearchBox.Text))
.Select(x => new { x.ID, Date = x.ABSDate, x.Nom, Prénom = x.Prenom, Filiére = x.FL, Groupe = x.GRP })
.ToList();
dataGridView1.DataSource = (from A in context.Absence
join S in context.Stagiaire on A.STG equals S.ID
join G in context.Groupe on S.GRP equals G.CODE
join F in context.FILERE on G.FL equals F.CODE
select new { A.ID, A.ABSDate, A.STG, S.Nom, S.Prenom, S.GRP, G.FL })
.Where(X => X.STG.Contains(SearchBox.Text) ||
X.Nom.Contains(SearchBox.Text) ||
X.Prenom.Contains(SearchBox.Text) ||
X.GRP.Contains(SearchBox.Text) ||
X.ABSDate.ToString("dd/MM/yyyy hh:mm").Contains(SearchBox.Text))
.Select(x => new { x.ID, Date = x.ABSDate, x.Nom, Prénom = x.Prenom, Filiére = x.FL, Groupe = x.GRP })
.ToList();
显然,我知道这就是问题所在:
X.ABSDate.ToString("dd/MM/yyyy hh:mm").Contains(SearchBox.Text)
如何将
搜索框
值格式化为dd/MM/yyyy hh:MM
,并使用包含
方法进行搜索?有两种方法:
第1部分-客户端评估
dataGridView1.DataSource = (from A in context.Absence
join S in context.Stagiaire on A.STG equals S.ID
join G in context.Groupe on S.GRP equals G.CODE
join F in context.FILERE on G.FL equals F.CODE
select new { A.ID, A.ABSDate, A.STG, S.Nom, S.Prenom, S.GRP, G.FL })
.Where(X => X.STG.Contains(SearchBox.Text) ||
X.Nom.Contains(SearchBox.Text) ||
X.Prenom.Contains(SearchBox.Text) ||
X.GRP.Contains(SearchBox.Text)
).AsEnumerable().Where(X => X.ABSDate.ToString("dd/MM/yyyy hh:mm").Contains(SearchBox.Text))
.Select(x => new { x.ID, Date = x.ABSDate, x.Nom, Prénom = x.Prenom, Filiére = x.FL, Groupe = x.GRP })
.ToList();
SearchBox.Text
格式化为datetime格式请记住,应该将其格式化为日期时间,因为linq to sql中的日期没有类似于的等价物。解决方案是从answer开发的
再次感谢如何将
搜索框格式化。文本
值设置为日期时间
?这是一种选择。使用日历控件选择日期将是明智的做法,而不是允许自由文本。tryParse的味道会更好,非常感谢这让我想到了一个好主意,它是使用AsEnumerable
将表中的所有数据转换为可枚举的
,在搜索顺利后,再次非常感谢Sir,这是否回答了您的问题?