C# 如何在LINQ查询中根据日期条件选择列
我的查询是,我想选择出生日期为系统日期的用户列表,我在控制器中使用了以下条件,但它给出了一个错误。 我想省略年份,并选择出生日期与系统日期和月份相同的用户 错误:C# 如何在LINQ查询中根据日期条件选择列,c#,linq,C#,Linq,我的查询是,我想选择出生日期为系统日期的用户列表,我在控制器中使用了以下条件,但它给出了一个错误。 我想省略年份,并选择出生日期与系统日期和月份相同的用户 错误: objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => Convert.ToDateTime(u.DOB).ToString("dd-MMM").Equals(DateTime.Now.ToString("dd-MMM"))).Select(u => u.
objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => Convert.ToDateTime(u.DOB).ToString("dd-MMM").Equals(DateTime.Now.ToString("dd-MMM"))).Select(u => u.Name).ToList();
LINQ to Entities无法识别方法“System.String ToString(System.String)”方法,并且无法将此方法转换为存储表达式。
控制器代码:
objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => Convert.ToDateTime(u.DOB).ToString("dd-MMM").Equals(DateTime.Now.ToString("dd-MMM"))).Select(u => u.Name).ToList();
用户生日在模型中定义为:
public IEnumerable<string> UserBirthdays { get; set; }
public IEnumerable用户生日{get;set;}
如何解决此错误并获取用户名?这将获得今天所有具有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?
),则需要先检查是否为空,然后将DOB转换为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();
这将使今天所有的用户都能使用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?
),则需要先检查是否为空,然后将DOB转换为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();
var-dob=DateTime.Now.ToString(“dd-MMM”);objUser.UserBirthdays=dbContext.EmployeeProfiles.Where(u=>u.DOB==DOB).Select(u=>u.Name.ToList()
(但这取决于数据库中的DOB)数据库中的DOB
格式是什么,为什么它是字符串而不是日期时间?(我假设它是一个字符串
,否则,为什么要使用Convert.ToDateTime()
)DOB的数据类型是数据库中的datetime。那么Convert.ToDateTime()
就没有意义了。是否要匹配日期和月份与今天的日期和月份(但可以是任何年份)匹配的所有记录?是的。你明白我的意思了。如果用户A和B的DOB为1990年8月29日和1987年8月29日,则应给出结果A和B,仅匹配日期和月份部分。var DOB=DateTime.Now.ToString(“dd MMM”);objUser.UserBirthdays=dbContext.EmployeeProfiles.Where(u=>u.DOB==DOB).Select(u=>u.Name.ToList()
(但这取决于数据库中的DOB)数据库中的DOB
格式是什么,为什么它是字符串而不是日期时间?(我假设它是一个字符串
,否则,为什么要使用Convert.ToDateTime()
)DOB的数据类型是数据库中的datetime。那么Convert.ToDateTime()
就没有意义了。是否要匹配日期和月份与今天的日期和月份(但可以是任何年份)匹配的所有记录?是的。你明白我的意思了。如果用户A和B的DOB为1990年8月29日和1987年8月29日,则应给出结果A和B,仅匹配日期和月份部分。删除ToList()
将推迟查询的执行(不一定是坏事,只是一个注释)@yinnonsanders将其添加回去这不起作用。请建议如何填充与日期和月份匹配的姓名列表。@SameepBaxiDOB
的类型是什么?是DateTime
还是DateTime?(nullable datetime)
我使用了您描述的上述方法。但它得到的是所有用户名的笛卡尔结果,其中DOB包含第8个月(当前月份)和第29个月(当前系统日期)的记录。这就像所有将DOB定为8月的用户一样,但不同的日期即将到来,所有将DOB定为29日(当前)但月份不同的用户也将因此到来。删除ToList()
将推迟查询的执行(不一定是坏事,只是一个提示)@yinnonanders补充道,这不起作用。请建议如何填充与日期和月份匹配的姓名列表。@SameepBaxiDOB
的类型是什么?是DateTime
还是DateTime?(nullable datetime)
我使用了您描述的上述方法。但它得到的是所有用户名的笛卡尔结果,其中DOB包含第8个月(当前月份)和第29个月(当前系统日期)的记录。这就像所有的用户都将DOB设定为8月,但不同的日期即将到来,所有的用户都将DOB设定为29日(当前),但结果是不同的月份即将到来。