2015-10-14 50 views
0

我有以下查詢,查詢中的「main」是前面步驟的結果。Linq查詢中的空引用錯誤不會消失,即使檢查爲null

var query = from a in main.AsEnumerable() 
      join b in result on a.id equals b.tId into joint 
      from c in joint.DefaultIfEmpty() 
      select new weekly() 
      { 
       id = a.id, 
       Mon = a.Mon 
       MHrs = (c.HoursList.Where(x => x.adt == "Monday") 
            .Select(y => y.thr).FirstOrDefault()) 
      }); 

當我運行這個查詢時,我得到了對於MHrs的System.NullReferenceException。當我評論MHrs時,它運行良好。

我曾嘗試

y => y.thr == null ? null : 0 

,但它仍然沒有奏效。

請讓我知道如何解決此查詢運行它沒有空引用異常。由於

+0

你確定你得到NullReferenceException而不是ArgumentNullException?可能是HoursList集合爲空。 –

+0

您是否知道x.adt是否爲空或y.thr爲空?並且y => y.thr == null? null:0應該如下:y => y.thr == null? 0:y.thr –

+0

在c#中默認的引用類型是_null_,所以如果'joint'是_Empty_,'c'是_null_ – Grundy

回答

0

當您使用DefaultIfEmptyjoint.DefaultIfEmpty()將返回null非匹配行(類型的默認值),所以你必須處理: -

query= from a in main.AsEnumerable() 
      join b in result on a.id equals b.tId into joint 
      from c in joint.DefaultIfEmpty() 
      select new weekly() 
      { 
       id= a.id, 
       Mon= a.Mon 
       MHrs= c != null ? c.HoursList.Where(x=> x.adt=="Monday") 
            .Select(y=>y.thr).FirstOrDefault() : "" 
      }); 

假設thrString