如何使用LINQ从varchar列查询日期范围

时间:2012-10-25 19:48:14

标签: c# sql-server linq entity-framework date

我继承了一个大型SQL Server数据库,该数据库具有某个表,该表具有某个日期列,该列是 yyyyMMdd 日期字符串格式的varchar(8)数据类型。为什么它不是datetime数据类型或类似的东西超出我。 (也许是为了节省空间?遗留数据库早就移植到SQL Server了?)

由于在日期想要的字段上过于慌乱,使用实体框架(DBContext w / LINQ)使用此列中的单个日期抓取行非常简单,如下所示:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date == myDateStr).ToList();

这就像它变得那么容易。但是,如果我想从此专栏中获取一系列日期,该怎么办?做这样的事情最好的方法是什么?

3 个答案:

答案 0 :(得分:5)

yyyyMMdd格式的日期按字母顺序和数字顺序排列,因此您可以像使用任何其他字符串列一样使用范围选择器。

试试这个:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= myStrDateStr && x.Date <= myStpDateStr).ToList();

答案 1 :(得分:1)

如果日期采用您所说的格式(例如,20121025),那么它们将被视为已经正确排序,并且以下内容应该有效:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= startDate && x.Date <= endDate).ToList();

答案 2 :(得分:0)

将datetime的ParseExact方法与自定义格式一起使用。然后,您可以将其与表达式中的日期时间进行比较。