C# 具有可空变量的Linq:如何执行比较
在asp mvc中,我有一个从数据库生成的实体框架模型。我有以下生成的实体类:C# 具有可空变量的Linq:如何执行比较,c#,asp.net,.net,asp.net-mvc,linq,C#,Asp.net,.net,Asp.net Mvc,Linq,在asp mvc中,我有一个从数据库生成的实体框架模型。我有以下生成的实体类: public partial class person { ... public Nullable<System.DateTime> data { get; set; } ... } 您可以尝试以下方法: where p.data.Value.Year == DateTime.Now.Year; List<person> listOfPeople = db.per
public partial class person
{
...
public Nullable<System.DateTime> data { get; set; }
...
}
您可以尝试以下方法:
where p.data.Value.Year == DateTime.Now.Year;
List<person> listOfPeople = db.person.Where(p=>p.data.Value.Year == DateTime.Now.Year)
.ToList();
至于您得到的错误:
无法将类型“int”隐式转换为“bool”
在中,您应该有一个可以计算为true/false的表达式
这个
或者这个:
Func<TSource, int, bool>
此外,由于日期
是可为空的日期时间
,因此必须首先检查它是否已经有值
也就是说,您应该使用以下查询:
List<person> listOfPeople = (from p in db.person
where p.Date.HasValue &&
p.Date.Value.Year == DateTime.Now.Year
select p).ToList();
listOfPeople=(来自p,单位为db.person)
其中p.Date.HasValue&&
p、 Date.Value.Year==DateTime.Now.Year
选择p.ToList();
您需要使用双精度==
进行值比较。此外,您还需要添加nullcheck(HasValue
),以防止在访问null DateTime的.Year
属性时出现NullReferenceException
List<person> listOfPeople = (from p in db.person
where p.data.HasValue
&& p.data.Value.Year == currentYear
select p).ToList();
listOfPeople=(来自p,单位为db.person)
其中p.data.HasValue
&&p.data.Value.Year==当前年份
选择p.ToList();
您使用的是赋值运算符,而不是相等运算符。请尝试其中p.data.Value.Year==currentYear
。请注意双重==
。请投票人解释一下我的答案有什么问题。非常感谢。不是downvoter,但是,OP可能应该在p.data
上添加一个空检查,否则将来会出现一些有趣的空引用异常。@Tommy感谢您的评论。我相应地更新了我的答案。
Func<TSource, bool>
Func<TSource, int, bool>
public partial class person
{
...
// Use a meaningful name for your properties, variables, methods etc.
public DateTime? Date { get; set; }
...
}
List<person> listOfPeople = (from p in db.person
where p.Date.HasValue &&
p.Date.Value.Year == DateTime.Now.Year
select p).ToList();
List<person> listOfPeople = (from p in db.person
where p.data.HasValue
&& p.data.Value.Year == currentYear
select p).ToList();