在带有日期比较的ICollection上使用Linq

时间:2015-01-09 14:21:23

标签: asp.net-mvc entity-framework-6

我正在使用标准的ApplicationUser,并且我使用公共虚拟IColliction配置文件增强了模型;

E.g

public class ApplicationUser(){
    ...
    public virtual ICollection<Profile> profiles;
}

我的个人资料型号:

public class Profile(){
    public Guid ID;
    ...
    public System.DateTime ValidFrom;
    public System.DateTime ValidTo;    
}

我希望为个人资料的ValidTo日期设置31/12/9999的永无止境日期。我想在配置文件控制器中获取配置文件。

我尝试了以下内容:

System.DateTime EndDate = DateTime.Parse("31/12/9999");

            string currentUserId = User.Identity.GetUserId();
            ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
            Profile profile = currentUser.Profiles.Select(s => s.ValidityEndDate >= EndDate);

我收到以下错误:

  

错误1无法隐式转换类型   'System.Collections.Generic.IEnumerable'到   'datex.Models.Profile'。存在显式转换(您是否遗漏了   演员?)

我假设我绝对不是正确的赛道,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

Select返回一个IEnumerable,而不是一个Profile对象。您应该使用FirstOrDefault,例如.FirstOrDefault(s => s.ValidityEndDate >= EndDate)或更改profile变量的类型以接受IEnumerable<Profile>

日期与此错误无关,但在DateTime.Parse中使用特定于语言环境的字符串可能导致发布。在这种特殊情况下,您可以使用DateTime.MaxValue而不是硬编码日期