我有一个输入开始日期和结束日期的两个字段,所以我想根据输入的日期过滤数据并仅显示那些日期范围内的数据,我的数据库中日期字段存储为字符串而不是DateTime所以iam努力在Linq中编写查询来过滤数据。到目前为止,我搜索我检查这两个字段是否为空,然后我正在努力查询
if (search.StartDate == null && search.EndDate == null)
if (search.StartDate!= null && search.EndDate != null)
{
var startDate = search.StartDate;
var endDate = search.EndDate;
query = query.Where(d => (d.Date) >= startDate.Date && (d.Date) <= endDate.Date).AsQuerybable();
}
答案 0 :(得分:1)
由于您的日期存储在MM.DD.YYYY中,因此在编写这些查询时会出现问题,如字符串比较:
12.03.1964 > 04.06.2017
因此,理想情况下,您需要将整个数据库中的日期格式更改为日期,或至少更改为YYYY-MM-DD格式,以便在服务器端应用有意义的范围。
第二个最佳解决方案是在数据库中创建一个视图或存储过程,以便从表中返回应用日期范围的记录,以便可以在服务器端应用该范围。
不需要更改数据库的解决方案只能应用日期范围客户端,并涉及以正确的顺序将字符串的各个部分组合在一起:
query = query.Where(d =>
DateInRangeFormat(d.Date) >= DateInRangeFormat(startDate.Date)
&& DateInRangeFormat(d.Date) <= DateInRangeFormat(endDate.Date))
.AsQuerybable();
// accepts date in MM.DD.YYYY format and returns YYYYMMDD
public static string DateInRangeFormat(string date)
{
return date.SubString(6) + date.SubString(0, 2) + date.SubString(3, 2);
}