更新到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)"
我在这里读到了一些类似的问题,但我没有找到任何解决方案,以及为什么它在更新之前有效,而在更新之后无效。。。
提前感谢您的回答
首先,由于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.DateP
和date
的格式如果它们都有相同的格式,您可以只比较字符串值。
return user!=null
&& bdd.Pointage.Any(p => p.DateP == date && p.User.UserId == user.UserId);