2009-08-08 61 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来设置你在做什么,但我不会推荐它。