如何在字符串中将字符串转换为DateTime?

时间:2014-06-11 14:15:15

标签: c# asp.net sql linq entity-framework

我必须将日历(startdat和enddat)中的选择日期与SQL 2008 R2数据库中的日期进行比较。我必须用LINQ编写它,但在我看来,DateTime被转换为String(Varchar)所以我必须将它在我的LINQ查询中转换回DateTime。我的基本查询现在看起来像这样:

var reportlist = (from r in context.Monthly_Report
                  where r.CreateDate >= startdat && r.CreateDate <= enddat
                  select r.Ticketnumber).ToList();

所以我得到的CreateDateString并且用于比较我要转换它。我已经用Convert.ToDateTime()尝试了,但是L2E存在问题。 那么如何在SQL脚本中转换它或者SQL知道我的意思呢?

感谢我得到的每一个帮助。 (顺便说一句,我不允许改变观点)

2 个答案:

答案 0 :(得分:3)

您只能在Linq to Entities中使用一组简化的函数。此功能将转换为DB功能。

您可以使用:

这些组中没有一个包含可以从字符串转换为日期时间的函数,因此无法直接执行此操作。

你必须寻找其他选择:

  • 创建一个DB视图,公开&#34;字符串化&#34; datetime作为datetimecolumn并查询它
  • 创建存储过程并使用它
  • 将datetime转换为字符串并进行比较,如果可能的话(这取决于&#34;字符串化&#34; datetime的样子)
  • 您可以使用以前的解决方案使用子字符串(将映射到数据库函数)。这适用于所有情况:重新排序&#34;字符串化&#34;的y,m,d。日期,所以它看起来像&#34; yyyymmdd&#34;。然后将您的startdatenddat转换为相同的格式,并按字符串(字母)顺序进行比较。

答案 1 :(得分:1)

从根本上说,您需要查看返回日期时间。

但是,有几种方法可以做到这一点。

1)您可以将数据作为字符串提取到列表对象中。那你就不会使用L2E。

var temp = (from r in context.Monthly_Report
            select new { r.Ticketnumber,  r.CreateDate} ).ToList();
var reportList = temp.Where(r =>  
                            Convert.ToDateTime(r.CreateDate) >= startdat && 
                            Convert.ToDateTime(r.CreateDate) <= enddat)

2)您可以将日期时间转换为字符串值并进行比较。

var reportlist = (from r in context.Monthly_Report
                  where r.CreateDate.CompareTo(startdatasstring) >= 0 && 
                        r.CreateDate.CompareTo(enddatasstring)  <= 0
                  select r.Ticketnumber).ToList();