Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用存储为字符串而不是日期时间的日期筛选数据_C#_Asp.net_Linq - Fatal编程技术网

C# 使用存储为字符串而不是日期时间的日期筛选数据

C# 使用存储为字符串而不是日期时间的日期筛选数据,c#,asp.net,linq,C#,Asp.net,Linq,a中有两个字段将输入开始日期和结束日期,因此我希望根据输入的日期过滤数据,并仅显示这些日期范围内的数据,我的数据库日期字段存储为字符串而不是日期时间,因此我正在努力用Linq编写查询以过滤数据。到目前为止,我搜索我检查这两个字段是否不为空,然后我正在努力进行查询 if (search.StartDate == null && search.EndDate == null) if (search.StartDate!= null && se

a中有两个字段将输入开始日期和结束日期,因此我希望根据输入的日期过滤数据,并仅显示这些日期范围内的数据,我的数据库日期字段存储为字符串而不是日期时间,因此我正在努力用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();
            }
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)当您的日期存储在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);
}
query=query.Where(d=>
DateInRangeFormat(d.Date)>=DateInRangeFormat(startDate.Date)

&&DateInRangeFormat(d.Date)你的日期存储在字符串中的格式是什么?为什么你必须将它们存储为字符串?要解决这一混乱局面,而不是四处奔波,需要做多少工作?我想你会后悔将日期存储为字符串。它会咬你1000次。只需修复这个明显的错误并完成它。我从某人那里继承了这个项目,因此这个人创建数据库的人做得不好他把所有东西都存储为NChar为什么这是
(d.Date)
括号中?您的日期是否存储为YYYYMMDD、YYYY-MM-DD、YYYY/MM/DD或DD/MM/YYYY、DD-MM-YYYY、MM-DD-YYYY等?这会影响您的查询是否有意义。您的搜索日期格式与数据库格式匹配吗?谢谢Steve,我已经更改了整个数据库,因为我不得不为其他数据库编写大量查询所以那会是个问题