2017-08-17 1 views
0

Entschuldigung, wenn mein Englisch nicht gut ist.Wie validiere ich null Werte auf linq

ich in einer Ansicht arbeite eine Suche zu tun, ich JSon bin mit der Abfrage zu tun,

Wenn ich die Daten aus der Datenbank mit dem nächsten JSON erhalten:

Json(db.CertificationHeaders.ToList().Join(db.CertificationDetails, c => 
c.HeaderCertificationID, cd => cd.HeaderCertificationID, (c, cd) => new { c, 
cd }) 
.Where((d => (d.c.PlanID.ToString().Contains(planID)) && 
d.cd.InternalConsecutive.Contains(internalConsecutive) || 
d.cd.SecurityConsecutive.Contains(securityConsecutive) || 
d.c.RequestDate.Value.Year.ToString().Contains(year) || 
d.c.DateGrant.Contains(grantDate))) 

alles geht gut unbis dieser Teil des Codes:

d.cd.SecurityConsecutive.Contains(securityConsecutive) 

, wenn die Informationen aus der Datenbank kommen „null“ ich bekomme ein

NullReferenceExeption

Ich habe eine Forschung getan und die Information sagt, dass dieser Fehler kommt, wenn ein Wert aus der Datenbank null ist, so ist die Frage: wie kann ich es vermeiden?

+0

Ich habe ein ernstes Problem mit Menschen, die nichts besseres zu tun haben, als von Post zu Post Downvoting Posts gehen. Nicht bürgerlich! – code4life

Antwort

1

Sie müssen null Instanzen herausfiltern. Ersetzen:

d.cd.SecurityConsecutive.Contains(securityConsecutive) 

mit:

(d.cd.SecurityConsecutive != null && d.cd.SecurityConsecutive.Contains(securityConsecutive)) 

Diese zunächst überprüft, um zu sehen, ob SecurityConsecutive und nur, wenn es nicht null ist es Contains nicht nennen. Das ist dank des Operators &&, der nur den zweiten Operanden prüft, wenn der erste wahr ist. Alles in Klammern zu verpacken, macht das äußere Where zu einer einzigen Anweisung. Es wird nur wahr sein, wenn beide innere Ausdrücke (!= und Contains) wahr sind.

+0

Super funktioniert es !! –

+0

@ DannyFernández Froh, ich könnte helfen. Achten Sie darauf, die Antwort als [akzeptiert] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) zu markieren, und viel Glück – stybl

0

Sie müssen einen weiteren Sicherheitscode einfügen. Wenn Sie die neueste Version von .NET haben, wird es ein bisschen leichter zu machen:

Json(db.CertificationHeaders 
    .ToList() 
    .Join(db.CertificationDetails, c => c.HeaderCertificationID, 
     cd => cd.HeaderCertificationID, (c, cd) => new { c, cd }) 
    .Where((d => (d.c.PlanID?.ToString().Contains(planID)) && 
      d.cd.InternalConsecutive?.Contains(internalConsecutive) || 
      d.cd.SecurityConsecutive?.Contains(securityConsecutive) || 
      d.c.RequestDate?.Year.ToString().Contains(year) || 
      d.c.DateGrant?.Contains(grantDate))); 

Die ? Syntax der null-conditional operator genannt wird, und Sie können erfahren Sie mehr darüber hier: https://msdn.microsoft.com/en-us/magazine/dn802602.aspx.

Hoffe, das hilft!