2011-09-12 34 views
0

我有一些LINQ到SQL和匿名类型的问题。LINQ-to-SQL匿名类型空值问题

我的GridView(它不是那么重要,但它是Telerik的radgrid控件),它具有以下数据源:

TSEntities db = new TSEntities(); 

     int idFirma = Convert.ToInt16(Request.QueryString["idt"]); 

     var ticketList = (from t in db.Ticket 
          where t.idFirma == idFirma 
          select t).ToList(); 


     gvTicketi.DataSource = from t in ticketList 
           where t.idFirma == idFirma 
           orderby t.idTicket, t.RedniBroj, t.DatumPrijave 
           select new { t.idTicket, t.idFirma, t.idKontakt, t.idManager, t.idNadredeniTicket, TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj, t.Biljeske, t.DatumDo, t.DatumPrijave, t.OpciPrioritet, t.Opis, t.OpisZatvoren, t.Prioritet, t.Status, t.Tip, t.VrstaPrijave, t.Zatvoren, NazivKontakta = t.Kontakt.Ime + " " + t.Kontakt.Prezime }; 

一切正常时NazivKontakta不为空,但是当空一切与崩溃以下错误:“对象引用未设置为对象的实例”,它解释了所有内容,但无法帮助我解决问题。

我想做什么(如果可能)是以某种方式检查空值,如果它为空,我想设置“NazivKontakta”字符串值“空”,如果它不是空值将其设置为数据库中的值。

有没有解决方案呢?任何帮助,将不胜感激!

预先感谢您!

回答

2

我怀疑这实际上是这个,这是造成该问题:

t.Kontakt.Ime + " " + t.Kontakt.Prezime 

即不NazivKontakta被空,但t.Kontakt被空。毕竟,如果什么都没有引用NazivKontaka,应该没有问题。

在查询试试这个:

NazivKontakta = t.Kontakt == null ? "" : t.Kontakt.Ime + " " + t.Kontakt.Prezime 
+0

这工作就像一个魅力!谢谢!这就是我一直在寻找的东西,但不知道要寻找什么。如果以这种方式编写的条件有一些特定的名称,请问这样做? –

+1

@Hrvach:这只是一般的条件运算符。它恰好在这里被应用在LINQ中,但是它已经在v1中使用了C#。 http://msdn.microsoft.com/en-us/library/ty67wk28.aspx –

1

尝试

NazivKontakta = t.Kontakt =! null ? 
         t.Kontakt.Ime + " " + t.Kontakt.Prezime : 
         string.Empty 
+0

谢谢!这一个也有效! –

0

我会写一个简单的IsNull函数或使用IsDBNull以便检查,如果它是空返回的String.Empty