2009-08-08 74 views
0

我使用ADO.NET實體框架連接數據庫並獲得data.I想做的事如果在對象中沒有數據,它也會寫「空場」,如果它的全部比會寫從列表中查看col數據從db.I得到'System.NullReferenceException'ERROr。當objectcontext.Dont中有一個空對象時,返回一個「EMPTY ROW」字符串。 這是我的代碼;什麼這個C#條件碼問題

using (ITSEntities arama = new ITSEntities()) 
      { 
       var sql = "SELECT VALUE s_tesis FROM ITSEntities.TB_SAGLIK_TESIS AS s_tesis WHERE s_tesis.TESIS_AD like @p1"; 
       ObjectQuery<TB_SAGLIK_TESIS> sorgu = new ObjectQuery<TB_SAGLIK_TESIS>(sql, arama).Include("TB_IL").Include("TB_TESIS_TIPI").Include("TB_TESIS_TURU"); 
       sorgu.Parameters.Add(new ObjectParameter("p1", String.Format("{0}%", btnAra.Text))); 

            listTesis.Items.Clear(); 

       foreach (var item in sorgu) 
       { 

        ListViewItem listitem = new ListViewItem { Text = item.KODU.ToString() }; 
        listitem.SubItems.Add(item.TESIS_AD); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_IL.ADI) ? "EMPTY ROW" : item.TB_IL.ADI); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TIPI.TIP_AD) ? "EMPTY ROW" : item.TB_TESIS_TIPI.TIP_AD); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TURU.TESIS_TURU) ? "EMPTY ROW" :item.TB_TESIS_TURU.TESIS_TURU); 
        listTesis.Items.Add(listitem); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.InnerException.ToString()); 
     } 

回答

1

我不知道EF,但你解引用下面幾行2個​​對象:

ListViewItem listitem = new ListViewItem { Text = item.KODU.ToString() }; 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_IL.ADI) ? "EMPTY ROW" : item.TB_IL.ADI); 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TIPI.TIP_AD) ? "EMPTY ROW" : item.TB_TESIS_TIPI.TIP_AD); 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TURU.TESIS_TURU 

如果容器對象(KODUTB_ILTB_TESIS_TIPITB_TESIS_TURU)是有史以來空,那麼你'd得到一個NullReferenceException。

我的猜想是這些是表名,並且有些行沒有與這些表的相應JOIN。在任何情況下,你可能需要重寫那些爲:

ListViewItem listitem = new ListViewItem { Text = (item.KODU ?? "").ToString() }; 
listitem.SubItems.Add(
    (item.TB_TL == null || String.IsNullOrEmpty(item.TB_IL.ADI)) 
    ? "EMPTY ROW" : item.TB_IL.ADI 
); 

爲了使它有點清潔,方法:

string EmptyRowIfNull<T>(T o, Func<T, string> p) { 
    string s; 
    if (o != null) { 
     s = p(o); 
    } 
    return string.IsNullOrEmpty(s) ? "EMPTY ROW" : s; 
} 

listitem.SubItems.Add(EmptyRowIfNull(item.TB_IL, t => t.ADI)); 
listitem.SubItems.Add(EmptyRowIfNull(item.TB_TESIS_TIPI, t => t.TIP_AD)); 
listitem.SubItems.Add(EmptyRowIfNull(item.TB_TESIS_TURU, t => t.TESIS_TURU)); 
+0

感謝名單Ÿ[R拯救我:) – 2009-08-08 10:40:30

0

你可能想嘗試item.attr.IsNull()

- 我相信,中投以字符串導致它標誌的項目爲空的IsNullOrEmpty測試之前。

0

我還沒有使用實體框架。但是,當SQL查詢返回沒有行時,你可以枚舉「sorgu」嗎?

可以測試出來,你可以包裝在foreach在一個try/catch,趕上NullReferenceException異常。有些人會使用這個NullReferenceException catch來設置你在做什麼,但我不會推薦它。