更新到MVC5后Linq到实体的概率

时间:2015-11-29 22:22:36

标签: c# asp.net-mvc entity-framework linq

我在更新到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)'

我在这里读到了这个例外的一些类似问题,但是我没有找到任何解决方案,为什么它在更新之前有效,之后没有......

提前感谢您的回答

1 个答案:

答案 0 :(得分:0)

首先,由于user可以为null,如果没有任何userprofile的用户名等于UserName,FirstOrDefault将返回null,我们必须在return语句中进行检查:

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);