【问题标题】:Entity Framework : when I filter by exact datetime, I get an error实体框架:当我按确切的日期时间过滤时,出现错误
【发布时间】:2021-01-06 03:09:50
【问题描述】:

我正在使用实体框架,我想从数据库中过滤一些数据。当我尝试这样做时:

编辑:我想要按日期字段进行实时搜索。
如果我写了 10,输出必须:

生日包含 10 的所有行。例如:

10.12.2020、10.10.2020、12.10.2020、12.12.2010

我试过了

1) var sm = _db.SomeModel.Include(d => d.OtherModel).AsQueryable();
   sm.Where(x => x.birthday.toString("dd.MM.yyyy").contains(birthday));

2) var sm = _db.SomeModel.Include(d => d.OtherModel).AsQueryable();
   sm.Where(x => EF.Functions.Like(x.birthday.toString("dd.MM.yyyy"), $"%{birthday}%"));

我的模特:

public partial class Customer
{
    public int Id {get; set;}
    public int ContactInfoId {get; set;}
    public string Lastname {get; set;}
    public string Firstname {get; set;}
    public DateTime? Birthday {get; set;}
    public ContactInfo Contact {get; set;}
}

public partial class ContactInfo
{
    public int Id {get; set;}
    public int TypeId {get; set;}
    public string Email {get; set;}
    public EmailType Type {get; set;}
}

public partial class EmailType
{
    public int Id {get; set;}
    public string value {get; set;}
}

和我的控制者

    var cust = _db.Customer.Include(e => e.ContactInfo).ThenInclude(e => e.EmailType).OrderBy(e => e.Lastname).AsQueryable();
cust = cust.Where(d => !d.Birthday.HasValue || (Convert.ToDateTime(d.Birthday).ToString("dd.MM.yyyy").Contains(birthday.toString)));

我收到一个 SQL 错误。

如何按确切的日期时间格式进行过滤?
错误是

.Where(c => !(c.Outer.Outer.Outer.Birthday.HasValue) || Convert.ToDateTime((objet)c.Outer.Outer.Outer.Birthday).ToString("dd.MM.yyyy").Contains() couldnt be translated

【问题讨论】:

  • 你得到什么错误信息?
  • 这些是本地化字符串,不完全是DateTimes。它们肯定会导致转换错误。至于查询 - 这是学校作业还是面试作业?没有人在生产中执行此类查询。没有人会检索关于 1066 年黑斯廷斯战役 和 1940 年 10 月不列颠战役结束的记录

标签: c# asp.net entity-framework asp.net-core asp.net-mvc-4


【解决方案1】:

试试这个代码:

    var sm = _db.SomeModel.ToList()
.Where(x => Convert.ToDateTime(x.birthday).ToString("dd.MM.yyyy").Contains(birthday));

【讨论】:

  • 不,它不起作用。它给出了couldn't translated 错误
  • @NAO,你能告诉我你当前的代码和模型吗?当我使用这些代码时,它可以工作。
  • @NAO,使用_db.SomeModel.ToList() 而不是AsQueryable()。
【解决方案2】:

如果我正确理解了您的数据模型,您应该使用以下内容:

DateTime birthdayForSearch = DateTime.ParseExact(birthday, "dd.MM.yyyy", CultureInfo.InvariantCulture).Date;
_db.SomeModel.Where(x => x.birthday.Date == birthdayForSearch)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-14
    • 2018-04-23
    • 2015-06-12
    • 1970-01-01
    • 2018-04-25
    • 2016-12-09
    • 2022-01-14
    • 2011-06-06
    相关资源
    最近更新 更多