В строке, где вы выполняете запрос, есть несколько вызовов, некоторые из которых зависят от вызовов до того, как они что-то вернут.Если какой-либо из них вернет null
, то будет сгенерировано исключение.
Использование синтаксиса нулевого распространения поможет вам избежать этого:
for (var i = 0;i <= 3; i++)
{
var typeIdOfObjectType =
db? // If db is null, then typeIdOfObjectType will be null
.Objects? // The same if .Objects is null
.Where(x => x.ObjectsName == ObjectTypeName)
.Select(x => x.ObjectTgId)
.First();
if(typeIdOfObjectType == null)
{
continue; // Jump to the next iteration
}
// (Anything below here will be skipped for any iteration
// where typeIdOfObjectType was null)
}
Это проверит значение db
и db.Objects
перед вызовом Where(..)
и остальными, и если какой-либо из них будет NULL
, тогда это будет установлено как значение вашей переменной, и вы можете избежать некоторых исключений.
Еще один источник нуль-исх.исключения могут быть, если в предложении Where(..)
ничего не найдено;если это так, вызов .First()
вызовет исключение.Поэтому вам следует заменить его на FirstOrDefault()
, который вместо этого вернет null
.
Наконец, я бы добавил проверку, чтобы проверить, является ли typeIdOfObjectType
значением null
, и, если это так, вызовет continue
, который пропускает любую логику, оставшуюся в цикле, и вместо этого переходит на итерацию гнезда.,