使用where子句在linq查询中将字符串转换为DateTime?

cod*_*ill 4 c# linq

我尝试使用EF获取用户列表。我在表中有一个文件,它的返回日期是字符串数据类型。现在我将这个返回日期与今天的日期进行比较,然后我得到了error.so任何想法如何在C#中将字符串转换为datetime。

这是查询:

var res = db.users
  .Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now)
  .ToList(); // but here not getting list
Run Code Online (Sandbox Code Playgroud)

因此可以将EF字符串转换为DateTime。如果有人有主意,请告诉我。

kgz*_*dev 8

您不能在中使用Convert.ToDatetimemethod LINQ to Entities,因此首先从db获取数据,然后使用list上的method

var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.Now).ToList();
Run Code Online (Sandbox Code Playgroud)

注意:如果你可以改变你columns data typeDateTime类型,那么你可以对它们进行比较LINQ To Entities,否则你应该做如上

  • 获取整个表来过滤应用程序中的数据是不好的做法 (4认同)
  • @coder将解决此问题的最佳方法是在数据库列中具有正确的数据类型。下一个最佳方法是将日期用作ISO格式的字符串(yyyy-MM-dd HH:mm:ss),因此您至少可以比较文本表示形式而不进行转换。 (2认同)

Nik*_*wal 4

根据您的评论来质疑您需要做什么

var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate, "dd-MM-yyyy", CultureInfo.InvariantCulture) > DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

在您的情况下Convert.ToDateTime(string str)不起作用,因为传递的DateTime格式与您系统的格式不同。

顺便提一句,

....EF 字符串到日期时间的转换。

切勿将日期时间字符串存储在数据库中。数据库具有相应的 DateTime 类型,您可以将信息存储为 DateTime 本身。这样,当传入值时,您就不必重复代码。