2013-08-30 53 views
0

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

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 

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

回答

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你将有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

相关问题