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

时间:2013-08-30 07:11:36

标签: c# sql linq

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

  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

进入日期时间。但不幸的是我不知道该怎么做。任何人都可以帮我修改上面的代码以满足要求。谢谢。

1 个答案:

答案 0 :(得分:0)

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 1}}您将拥有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