2012-09-19 69 views
3

我有日期時間爲空的where子句中查找某個實體的子對象:LINQ到實體:在where子句

var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN && x.OffDate == co.OffDate).ToList(); 

有時co.OffDate可以爲null,這將導致異常。現在,我能想到的要解決這個問題的唯一辦法,就是使用if語句:

if (co.OffDate.HasValue) 
           { 
var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN && x.OffDate == co.OffDate).ToList(); 
           } 
           else 
           { 
            var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN).ToList(); 
           } 

反正我可以重新編寫LINQ查詢來完成if語句做什麼?我仍然想要查找,即使co.OffDate爲空。

+0

在你的數據庫,是日期時間字段爲空的? –

+0

@ErikPhilips是的。 – broke

+0

那麼,你是否曾經**想要找回違法所有OffenseDate爲空的結果? –

回答

8

你可以插入一個三元到您在哪裏過濾:

var Lookup = row.Offenses 
    .Where(x => 
    x.Desc == co.Desc 
    && x.Action == co.Action 
    && x.AppealYN == co.AppealYN 
    && (co.OffDate.HasValue ? x.OffDate == co.OffDate : true) 
).ToList(); 
+0

我們走了。這正是我需要的。謝謝! – broke

+0

太棒了!不要忘記標記爲接受的答案,請:-) –

2

我會重寫它更可讀的(在我看來):

var query = row.Offenses.Where(x => x.Desc == co.Desc 
            && x.Action == co.Action 
            && x.AppealYN == co.AppealYN) 
if (co.OffenseDate.HasValue) 
{ 
    query = query.Where(x.OffDate == co.OffenseDate); 
} 

var Lookup = query.ToList();