2011-01-14 56 views
8

在下面的LINQ語句中,我想在2010年選擇具有考試日期的人員。考試日期作爲日期時間存儲,因爲實際日期和時間用於其他應用。什麼是最優雅,最簡單,最好的方式來比較exzam日期只有'2010'。或者,我應該比較一下,使用> =,考試日期爲2010年1月1日?在WHERE條件中僅使用日期的年份部分

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

我想我應該看到在考試日期.Year,但我沒有。看到這裏的一些帖子後,我回去發現這個作品...

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

爲什麼.Value訪問.Year?考試是可以空的日期時間。

+0

`.Value`是必要的,因爲`exam`是您模型中的一個可爲空的字段。 (我認爲在你的數據庫中相應的列允許NULL)。 – 2011-01-14 18:45:44

+0

@Scott - 這是正確的,DB允許在該列中的空值。謝謝。 – DenaliHardtail 2011-01-14 18:48:06

回答

18

你可以只使用在Year財產上DateTime

var active = from p in dc.People 
      where p.Exam.Year >= 2010 
      select new { 
       p.ContactID, 
       p.FirstName, 
       p.LastName 
      }; 

爲什麼.value的需要訪問.Year?考試是可以空的日期時間。

正是因爲ExamNullable<DateTime>。當你聲明的Nullable<DateTime>實例像

DateTime? exam; 

注意exam不是DateTime,因此,你不能直接訪問的DateTime屬性。爲了得到一個具體的實例DateTime您使用Nullable<DateTime>Value財產(所有Nullable<T>■找該屬性),以便

DateTime instance = exam.Value; 

是一個DateTime假設examnull。因此,可以說

int year = instance.Year; 

,當然,爲了簡便起見

int year = exam.Value.Year; 

注意,如果exam.HasValue是假的,這將拋出。

0

我不知道最優雅的方式,但是這是你能做到這一點假設examdate最簡單的方法是存儲您的日期,並根據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}) 
        ); 
相關問題