如何在 c# linq 中使用字符串日期时间并将其与 sql 进行比较?
How can I use and compare string datetime in c# linq to sql?
我的 PC 上有数据库,并以 nchar
格式保存到数据库日期,我想使用此查询:
var query = (from t in behzad.STATUS
where DateTime.Parse(t.date) >= DateTime.Parse("1394/4/21") <= DateTime.Parse(NOW)
select p).ToArray();
但我得到这个错误:
Additional information: Method 'System.DateTime Parse(System.String)'
has no supported translation to SQL.
我该如何解决这个问题?
您不能在 linq to entities 中使用 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();
使用 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
实体获取所有数据,并可能导致大型结果集的开销。
我的 PC 上有数据库,并以 nchar
格式保存到数据库日期,我想使用此查询:
var query = (from t in behzad.STATUS
where DateTime.Parse(t.date) >= DateTime.Parse("1394/4/21") <= DateTime.Parse(NOW)
select p).ToArray();
但我得到这个错误:
Additional information: Method 'System.DateTime Parse(System.String)' has no supported translation to SQL.
我该如何解决这个问题?
您不能在 linq to entities 中使用 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();
使用 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
实体获取所有数据,并可能导致大型结果集的开销。