如何在c#linq中使用和比较字符串日期时间到sql?

时间:2015-10-29 11:18:05

标签: c# linq linq-to-sql

我的电脑上有数据库,并以nchar格式保存到该数据库日期,我想使用此查询:

 var query = (from t in behzad.STATUS
              where DateTime.Parse(t.date) >= DateTime.Parse("1394/4/21") <= DateTime.Parse(NOW)
              select p).ToArray();


但是我得到了这个错误:

  

附加信息:方法'System.DateTime Parse(System.String)'   没有受支持的SQL翻译。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用ToList()退出SQL域,然后尝试解析日期,如下所示:

var query = (from t in behzad.STATUS.ToList()
              where DateTime.Parse(t.date) >= new DateTime(1394,4,21) <= DateTime.Now
              select p).ToArray();

编辑:请注意,此ToList()会从behzad.STATUS实体获取所有数据,并可能导致大型结果集的开销。

答案 1 :(得分:0)

您不能在linq中使用parse方法实体,并且您在db对象中使用字符串值,因此无法在解析之前解析并传入变量。尝试获取结果然后过滤它们。对于大型数据集而言,这并不理想,因为您将更多数据提取到内存中,但这是最简单的方法:

var data = behzad.STATUS.ToList();
var query = data.Where(t => DateTime.Parse(t.date) >= DateTime.Parse("1394/4/21") <= DateTime.Parse(NOW)).ToArray();

要做到这一点而不先撤回所有数据,最好将数据库更改为存储日期,而不是字符串sthen,你可以这样做:

var date1 = DateTime.Parse("1394/4/21");
var date2 = DateTime.Parse(NOW); //If this is the time now then try using DateTime.Now or DateTime.Today
var query = behzad.STATUS.Where(t => t.date/*this is now a dateTime object*/ >= date1 <= date2).ToArray();