2014-01-07 13 views
5

Ich habe den folgenden Code insdie meine asp.net MVC Web-Anwendung: -Der Cast-to-Value-Typ 'Int32' ist fehlgeschlagen, da der materialisierte Wert null ist.

SystemInformation s = new SystemInformation() 
      { 
AssetCount = new AssetCount() { 

       CustomerCount = entities.AccountDefinitions == null ? 0 : entities.AccountDefinitions.Count(), 
       RackCount = tms.TMSRacks == null ? 0 : tms.TMSRacks.Count(), 
       ServerCount = tms.TMSServers == null ? 0 : tms.TMSServers.Count(), 
       CustomCount = tms.CustomAssets==null? 0 : tms.CustomAssets.Sum(a => a.Quantity) 

      }, 

Aber zur Zeit, wenn eine der Enumerable leer ist, werde ich die folgende Fehlermeldung erhalten: -

The cast to value type 'Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.

+0

Es ist, weil Int32 ist ein primitiver Typ kein Objekt und somit nicht Nullable. Versuchen Sie, was in diesem [Thema] vorgeschlagen wird (http://stackoverflow.com/questions/2152717/what-is-the-integer-reference-type-in-c). TL; DR: wenn RackCount (zum Beispiel) entweder mit der Syntax "int32? RackCount; 'oder' Nullable RackCount; ' – Sidewinder94

+0

@ Sidewinder94 Warum sollte er obwohl? Wenn 'tms.TMSRacks' null ist, speichert er 0. –

+1

Sie sollten nicht alle diese Sammlungen Null an erster Stelle haben. Diese Kontrollen sollten nicht erforderlich sein. Denken Sie daran, * null * und * leer * sind zwei sehr unterschiedliche Dinge für eine Sammlung. – Servy

Antwort

8

Das Problem ist wahrscheinlich, dass die tms.CustomAssets Sammlung leer ist. Um zu beheben schreiben Sie etwas wie das Folgende:

+0

Ich kann nicht auf das Wort "let" verweisen. –

+1

@johnG Recht, Sie haben tatsächlich keine Abfrage, nur in eine Variable vor dem Ausdruck. – Magnus

+0

vielen Dank für die Hilfe. Also kann ich schlussfolgern, dass .count() auf einer leeren Liste arbeitet, während Sum() nicht funktioniert? –

Verwandte Themen