更新到MVC5后,Linq到实体出现问题

本文关键字:问题 实体 MVC5 更新 Linq | 更新日期: 2023-09-27 18:25:02

更新到MVC 5后,我面临另一个问题。

我有一个功能可以检查某个日期是否做了一件事:

UserProfile user = bdd.UserProfile.FirstOrDefault(u => u.UserName == UserName);
return bdd.Pointage.Any(p => Convert.ToDateTime(p.DateP) == Convert.ToDateTime(date) && p.User.UserId == user.UserId);

但是现在,在更新到MVC 5之后,当我执行这个时,我遇到了一个异常。

LINQ to Entities无法识别方法"System.DateTime ToDateTime(System.String)"

我在这里读到了一些类似的问题,但我没有找到任何解决方案,以及为什么它在更新之前有效,而在更新之后无效。。。

提前感谢您的回答

更新到MVC5后,Linq到实体出现问题

首先,由于user可以为null,如果没有用户名等于username的用户配置文件,FirstOrDefault将返回null,我们必须在返回语句中进行检查:

return user!=null 
&& bdd.Pointage.Any(p => Convert.ToDateTime(p.DateP) == Convert.ToDateTime(date) && p.User.UserId == user.UserId);

这种改变不会解决你的问题,但应该这样做。您遇到的问题与Convert.ToDateTime方法的使用有关。这不是MVC的问题。之所以会发生这种情况,是因为我们无法在这种情况下使用这种方法。我们不能使用它的原因是,实体框架不知道如何正确地转换此方法调用并将其发送到数据库。

你能做什么?我认为一个选项取决于字符串p.DatePdate的格式如果它们都有相同的格式,您可以只比较字符串值。

return user!=null 
&& bdd.Pointage.Any(p => p.DateP == date && p.User.UserId == user.UserId);