在下面的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)
为什么.Value必须访问。年?考试是一个可以为空的日期时间。
答案 0 :(得分:21)
您可以使用Year
上的DateTime
媒体资源:
var active = from p in dc.People
where p.Exam.Year >= 2010
select new {
p.ContactID,
p.FirstName,
p.LastName
};
为什么.Value必须访问。年?考试是一个可以为空的日期时间。
正是因为Exam
是Nullable<DateTime>
。当您声明Nullable<DateTime>
的实例时
DateTime? exam;
请注意,exam
不是DateTime
,因此您无法直接访问DateTime
的属性。要获得DateTime
的具体实例,请使用Value
上的Nullable<DateTime>
属性(所有Nullable<T>
都有此属性),以便
DateTime instance = exam.Value;
假设DateTime
不是exam
,是null
。你可以说
int year = instance.Year;
当然,为了简洁起见
int year = exam.Value.Year;
请注意,如果exam.HasValue
为false,则会抛出此内容。
答案 1 :(得分:0)
我不知道最优雅的方式,但这是最简单的方法,假设考试是你存储日期的日期时间col并基于I want to select people with an exam date in 2010
-
var active = dc.People.Where(x => x.examdate.year == 2010)
.Select(x => new {x.ContactID, x.FirstName, x.LastName})
);