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,这是否回答了您的问题?