Linq 仅将日期的年份部分用于WHERE条件
在下面的LINQ声明中,我想选择考试日期在2010年的人。考试日期作为实际日期和时间存储在其他应用程序中。将exzam日期与“2010”日期进行比较的最优雅、最简单、最好的方法是什么。或者,我应该使用>=,将考试日期与2010年1月1日进行比较吗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})
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;