如何使用和比较c#linq中的字符串datetime和sql

本文关键字:字符串 datetime sql c#linq 何使用 比较 | 更新日期: 2023-09-27 18:19:42

我的电脑上有数据库,在以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分析(System.String)"没有支持的SQL转换。

我该如何解决那个问题?

如何使用和比较c#linq中的字符串datetime和sql

使用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();

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

您不能将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();

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

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();