Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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#_Asp.net_.net_Asp.net Mvc_Linq - Fatal编程技术网

C# 具有可空变量的Linq:如何执行比较

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

在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.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();