Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Linq 仅将日期的年份部分用于WHERE条件_Linq_Entity Framework_Entity Framework 4 - Fatal编程技术网

Linq 仅将日期的年份部分用于WHERE条件

Linq 仅将日期的年份部分用于WHERE条件,linq,entity-framework,entity-framework-4,Linq,Entity Framework,Entity Framework 4,在下面的LINQ声明中,我想选择考试日期在2010年的人。考试日期作为实际日期和时间存储在其他应用程序中。将exzam日期与“2010”日期进行比较的最优雅、最简单、最好的方法是什么。或者,我应该使用>=,将考试日期与2010年1月1日进行比较吗 var active = dc.People.Where(x => x.exam >= 2010) .Select(x => new {x.ContactID, x.FirstName, x.LastName})

在下面的LINQ声明中,我想选择考试日期在2010年的人。考试日期作为实际日期和时间存储在其他应用程序中。将exzam日期与“2010”日期进行比较的最优雅、最简单、最好的方法是什么。或者,我应该使用>=,将考试日期与2010年1月1日进行比较吗

var active = dc.People.Where(x => x.exam >= 2010)
        .Select(x => new {x.ContactID, x.FirstName, x.LastName})
                   );

x.MostRecent == DateTime.Parse("1/1/2010").Year
编辑#1

我想我应该在考试日期前看一年,但我没有。在看到这里的几个帖子后,我回去发现这个作品

.Where(x => x.exam.Value.Year == 2010)

为什么访问.Year需要.Value?考试是一个可为空的日期时间。

我不知道最优雅的方法,但这是最简单的方法,假设examdate是存储日期的日期时间列,并基于
我想选择2010年有考试日期的人
-

var active = dc.People.Where(x => x.examdate.year == 2010)
        .Select(x => new {x.ContactID, x.FirstName, x.LastName})
                   );

您只需在
DateTime
上使用
Year
属性即可:

var active = from p in dc.People
             where p.Exam.Year >= 2010
             select new {
                 p.ContactID,
                 p.FirstName,
                 p.LastName
             };
为什么访问.Year需要.Value?考试是一个可为空的日期时间

正是因为
考试
是一个
可空的
。当您声明
null的实例时

DateTime? exam;
请注意,
exam
不是
DateTime
,因此您不能直接访问
DateTime
的属性。要获取
DateTime
的具体实例,请使用
Nullable
上的
Value
属性(所有
Nullable
都具有此属性),以便

是一个
DateTime
假设
test
不是
null
。因此,你可以说

int year = instance.Year;
当然,为了简洁起见

int year = exam.Value.Year;

请注意,如果
exam.HasValue
为false,则会引发此错误。

@SpecialAgent\u W436:正是因为
人。exam
是一个
可空的
(也称为
日期时间?
)。
值是必需的,因为
exam
在您的模型中是一个可空的字段。(我假定在您的数据库中,相应的列允许空值。)@Scott-没错,DB允许该列中的空值。谢谢
int year = exam.Value.Year;