2010-01-02 111 views
1

現在,我在我的存儲庫中遇到了這個空問題。這裏是我寫的一段代碼爲linq sql ...我已經嘗試了很多選項,但沒有幫助。需要針對問題null問題的解決方案

這裏的問題是,如果vidList得到空值,它就卡在第3行。

如果vidList正常,但fidListE爲null,則它將在返回中導致null異常。

我嘗試了很多選項,比如使用Count,使用'??' ...但仍然沒有幫助。

public List<ATTACHMENT> existedAttachment(IList<int> vidList, IList<int> fidList, IList<int> iidList) 
    { 
     IEnumerable<int> vidListE = vidList.Distinct(); 
     IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : null; 
     IEnumerable<int> iidListE = (iidList != null) ? iidList.Distinct() : null; 
     return (from d in _db.ATTACHMENTs 
        .Where<ATTACHMENT>(d => 
         ((vidListE != null) ? (vidListE.Contains<int>(d.VID_ID.Value)) : false) || 
         ((fidListE != null) ? (fidListE.Contains<int>(d.FID.Value)) : false) || 
         ((iidListE != null) ? (iidListE.Contains<int>(d.IMG_ID.Value)) : false) 
        ) 
       select d).ToList<ATTACHMENT>(); 
    } 

有人可以給我提供一點線索。非常感謝你。我的大腦剛剛迎來新年。 :P

回答

1

而不是使用空的,使用內置的空枚舉:

IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : Enumerable.Empty<int>(); 

的現在包含()方法始終返回false,你不必檢查查詢爲空。

0

如果列表中不補課可空整數的即

+0

你是什麼意思? :)這裏列表據說包含0元素,如果它沒有任何。但是不是這樣,它直接導致null,這導致IEnumerable.Contains掙扎。我不知道有什麼辦法擺脫這個問題。 – DucDigital 2010-01-02 18:57:46

1

你有沒有嘗試過這樣的事情在方法的開始。如果參數爲null,則將其設置爲空列表。

IEnumerable<int> vidListE = (vidList != null) ? vidList.Distinct() : new List<int>(); 
IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : new List<int>(); 
IEnumerable<int> iidListE = (iidList != null) ? iidList.Distinct() : new List<int>(); 

return (from d in _db.ATTACHMENTs 
        .Where<ATTACHMENT>(d => 
         vidListE.Contains<int>(d.VID_ID.Value) || 
         fidListE.Contains<int>(d.FID.Value) || 
         iidListE.Contains<int>(d.IMG_ID.Value)) 
        ) 
       select d).ToList<ATTACHMENT>();