2017-08-28 51 views
-1

我的查询是我想选择出生日期是系统日期的用户列表,我在我的控制器中使用了以下条件,但是它给出了一个错误。 我想省略一年,并选择出生日期与系统日期和月份相同的用户。如何根据日期条件在LINQ查询中选择一个列

错误:

LINQ实体无法识别方法“System.String的ToString(System.String)”方法,和这种方法不能被翻译成表达商店。

控制器代码:

public IEnumerable<string> UserBirthdays { get; set; } 

如何解决这个错误,并得到用户名:

objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => Convert.ToDateTime(u.DOB).ToString("dd-MMM").Equals(DateTime.Now.ToString("dd-MMM"))).Select(u => u.Name).ToList(); 

UserBirthdays在模型定义?

+0

'var dob = DateTime.Now.ToString(“dd-MMM”); objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => u.DOB == dob).Select(u => u.Name).ToList();'(但这取决于DOB在db中的含义) –

+1

数据库中“DOB”的格式是什么,为什么它是一个字符串而不是DateTime? (我假设它是一个'string',否则为什么要使用'Convert.ToDateTime()') –

+0

DOB的数据类型是数据库中的datetime。 –

回答

1

这今天将让所有的用户DOB:

如果DOB是DateTime类型:

objUser.UserBirthdays = dbContext.EmployeeProfiles 
          .Where(u => u.DOB.Day == DateTime.Today.Day 
            && u.DOB.Month == DateTime.Today.Month) 
          .Select(u => u.Name).ToList(); 

如果DOB数据类型为空的DateTime(DateTime?),那么你需要检查先将空值转换为DateTime

objUser.UserBirthdays = dbContext.EmployeeProfiles 
          .Where(u => u.DOB != null 
            && Convert.ToDateTime(u.DOB).Day == DateTime.Today.Day 
            && Convert.ToDateTime(u.DOB).Month == DateTime.Today.Month) 
          .Select(u => u.Name).ToList(); 
+0

删除'ToList()'会延迟查询的执行(不一定是坏的东西,只是一个说明) – yinnonsanders

+0

@yinnonsanders加回来 – adiga

+0

这是行不通的。请建议如何填充与日期和月份相匹配的名称列表。 –

相关问题