2014-01-07 5 views
5

У меня есть следующий код insdie моих ASP.NET MVC веб-приложения: -Недопустимое значение для значения типа Int32, поскольку материализованное значение равно null.

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) 

      }, 

Но в настоящее время, если какие-либо из Enumerable пустует я получу следующее сообщение об ошибке: -

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

Это потому, что int32 является примитивным типом, а не объектом и, следовательно, не может быть недействительным. Попробуйте, что предложено в этой статье [http://stackoverflow.com/questions/2152717/what-is-the-integer-reference-type-in-c). TL; DR: при объявлении RackCount (например) с использованием синтаксиса 'int32? RackCount; 'или' Nullable RackCount; ' – Sidewinder94

+0

@ Sidewinder94 Зачем ему это нужно? Если 'tms.TMSRacks' имеет значение NULL, он сохраняет 0. –

+1

. Вы не должны иметь ни одну из этих коллекций в нулевом значении. Там не должно быть необходимости в этих проверках. Имейте в виду, что * null * и * empty * - две разные вещи для коллекции. – Servy

ответ

8

Проблемы вероятно, что коллекция tms.CustomAssets пуста. Чтобы исправить, напишите примерно следующее:

var tmpCustomCount = tms.CustomAssets.Sum(a => (int?)a.Quantity); 

... 
AssetCount = new AssetCount() 
{ 
... 
    CustomCount = tmpCustomCount ?? 0 
} 
+0

Я не могу ссылаться на слово «let» .. –

+1

@johnG right, у вас на самом деле нет запроса, просто поместите его в переменную перед выражением. – Magnus

+0

благодарит за помощь. поэтому я могу заключить, что .count() будет работать в пустом списке, а Sum() не будет? –

Смежные вопросы

 Смежные вопросы