如何使用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
进入日期时间。但不幸的是,我不知道该怎么做。有人能帮我修改以上代码以满足要求吗。非常感谢。
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)