我尝试使用EF获取用户列表。我在表中提交了一个作为字符串数据类型的返回日期。现在我将这个返回日期与今天的日期进行比较然后我收到错误。所以任何一个想法如何将字符串转换为C#中的日期时间。
以下是查询:
var res = db.users
.Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now)
.ToList(); // but here not getting list
因此可以在EF字符串中进行DateTime转换。如果有人有想法,请告诉我。
答案 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也以正确的方式更新了他的答案。 )