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

时间:2017-04-25 12:37:42

标签: c# linq

我尝试使用EF获取用户列表。我在表中提交了一个作为字符串数据类型的返回日期。现在我将这个返回日期与今天的日期进行比较然后我收到错误。所以任何一个想法如何将字符串转换为C#中的日期时间。

以下是查询:

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

因此可以在EF字符串中进行DateTime转换。如果有人有想法,请告诉我。

4 个答案:

答案 0 :(得分:4)

您不能在Convert.ToDatetime中使用LINQ to Entities方法,因此首先从db获取数据然后使用列表中的方法

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

注意:如果您可以将columns data type更改为DateTime类型,则可以LINQ To Entities比较,否则您应该如上所述

答案 1 :(得分:3)

根据您的提问,您需要做

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

在您的情况下,Convert.ToDateTime(string str)无法正常使用DateTime格式与您的系统格式不同。

顺便说一句,

  

.... EF字符串到DateTime的转换。

永远不要在数据库中存储DateTime字符串。数据库具有相应的DateTime类型,您可以在其中将信息存储为DateTime本身。这样,在带来价值时,您不必重复代码。

答案 2 :(得分:0)

试试这个:

var res = db.users.where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.now).ToList();

答案 3 :(得分:0)

使用当前架构,您只能获取所有对象的列表,然后对其进行过滤。

Linq to Entities构造在枚举完成时执行的SQL查询。

所以只需获取完整列表,然后过滤它。或者强烈建议更改数据库架构。

<强>更新

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

但过滤前会加载全表。所以你需要将你的字段类型更改为datetime。然后你可以在Where内使用简单比较。

@NikhilAgrawal也以正确的方式更新了他的答案。 )