如何使用LINQ中的Datetime字段搜索数据库

本文关键字:字段 搜索 数据库 Datetime 中的 何使用 LINQ | 更新日期: 2023-09-27 18:29:40

我有一个搜索按钮和文本字段,用户可以在其中插入付款日期,按下按钮将在网格视图行中显示搜索结果。我有一个类似的代码来搜索数据库,但字符串值。这是我的代码:

  public List<PaymentsHeader> GetPaymentsMadeForSearch(string keyword)
    {
        CosisEntities db = new CosisEntities();
        IQueryable<PaymentsHeader> query = db.PaymentsHeaders.OrderByDescending(m => m.PaymentDate);
        if (!string.IsNullOrEmpty(keyword))
        {
            keyword = keyword.ToLower();
            query = query.Where(m =>
                    (!string.IsNullOrEmpty(m.VendorID) && m.VendorID.ToLower().Contains(keyword))
                || (!string.IsNullOrEmpty(m.CheckNumber) && m.CheckNumber.ToLower().Contains(keyword))
                 || (!string.IsNullOrEmpty(m.Notes) && m.Notes.ToLower().Contains(keyword))
                || m.PaymentsDetails.Select(j => j.Description).Contains(keyword)
                );
        }
        return query.ToList();
    }

因此,在这段代码中,我使用字符串字段搜索表格,但我的要求是使用付款日期搜索表格。因此,为此我需要转换字段

 String Keyword

进入日期时间。但不幸的是,我不知道该怎么做。有人能帮我修改以上代码以满足要求吗。非常感谢。

如何使用LINQ中的Datetime字段搜索数据库

DateTime date;
bool isDate = DateTime.TryParse(keyword, out date);
DateTime? date2 = isDate ? (DateTime?)date : null;

然后

|| m.PaymentDate == date2

在sql中,null总是不同于任何东西(甚至不同于null,所以null != null),所以如果keyword不是日期,那么在date2中,您将有null,并且检查将始终返回false(但请注意,这可能会在EF的未来发生变化:http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015361-incorrect-handling-of-null-variables-in-where-cl?ref=title%23suggestion-1015361)