仅使用WHERE条件的日期的年份部分

时间:2011-01-14 18:06:12

标签: 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})
                   );

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

编辑#1

我以为我应该在考试日期看到一个。但是我没有。在这里看到几个帖子之后我回去发现这个有用......

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

为什么.Value必须访问。年?考试是一个可以为空的日期时间。

2 个答案:

答案 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必须访问。年?考试是一个可以为空的日期时间。

正是因为ExamNullable<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})
                   );