Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ查询中根据日期条件选择列_C#_Linq - Fatal编程技术网

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将其添加回去这不起作用。请建议如何填充与日期和月份匹配的姓名列表。@SameepBaxi
DOB
的类型是什么?是
DateTime
还是
DateTime?(nullable datetime)
我使用了您描述的上述方法。但它得到的是所有用户名的笛卡尔结果,其中DOB包含第8个月(当前月份)和第29个月(当前系统日期)的记录。这就像所有将DOB定为8月的用户一样,但不同的日期即将到来,所有将DOB定为29日(当前)但月份不同的用户也将因此到来。删除
ToList()
将推迟查询的执行(不一定是坏事,只是一个提示)@yinnonanders补充道,这不起作用。请建议如何填充与日期和月份匹配的姓名列表。@SameepBaxi
DOB
的类型是什么?是
DateTime
还是
DateTime?(nullable datetime)
我使用了您描述的上述方法。但它得到的是所有用户名的笛卡尔结果,其中DOB包含第8个月(当前月份)和第29个月(当前系统日期)的记录。这就像所有的用户都将DOB设定为8月,但不同的日期即将到来,所有的用户都将DOB设定为29日(当前),但结果是不同的月份即将到来。