2013-11-21 3 views
1

Я знаю, что это очень много спрашивается, и я прочитал похожие записи, но я не могу понять свою ошибку. Я получаю ссылку на объект, не установленную в экземпляр объектной ошибки с файлом .aspx.cs.Ссылка на объект не установлена ​​в экземпляр объекта - C# Ошибка

Вот фрагмент моего кода ... ошибка вызывается линией String.IsNullOrEmpty(accountInCrm.ParentAccountId.Id.ToString()).

Примечание: контекст объявлен далее в моем коде, а enduserDropdown - это элемент управления, который я создал с помощью ASP.

foreach (var accountInCrm in context.AccountSet.ToList()) 
      { 
       if (accountInCrm.StateCode == 0) 
       { 
        if (String.IsNullOrEmpty(accountInCrm.ParentAccountId.Id.ToString())) 
        { 
         enduserDropdown.Items.Add(new ListItem(accountInCrm.Name, accountInCrm.Id.ToString())); 
        } 

Я знаю, что accountInCrm не пусто и если я просто удалить String.IsNullOrEmpty Если оператор все хорошо, и значения добавляются в моем раскрывающемся списке.

Любые идеи, что может быть причиной этого?

EDIT: ------------------

foreach (var accountInCrm in context.AccountSet.ToList()) 
{ 
    if (accountInCrm.StateCode == 0) 
    { 
     if (accountInCrm.ParentAccountId != null) 
     { 
      enduserDropdown.Items.Add(new ListItem("test 2", accountInCrm.Id.ToString())); 
     } 
     else 
     { 
      enduserDropdown.Items.Add(new ListItem("test 3", accountInCrm.Id.ToString()));  
     } 
    } 
} 

EDIT 2: ------------- извлечения данных из CRM

var context = new XrmServiceContext(); 

foreach (var accountInCrm in context.AccountSet.ToList()) 

Петля проходит через каждую учетную запись в CRM. Я точно знаю, что не все учетные записи в CRM имеют пустой идентификатор родительской учетной записи, некоторые делают, но большинство нет.

+4

Предположим, что идентификатор является только строковым значением. Похоже, что ParentAccountID имеет значение null – Steve

+2

Просто fyi, это, вероятно, наиболее распространенное исключение в C#. Когда вы его получите, есть несколько простых шагов для его решения. Во-первых, найдите, какая строка вызывает ошибку, а затем найдите доступ к свойствам/вызову метода в любых ссылках поблизости, если какая-либо из ваших ссылок не проверяется на предмет недействительности до вызова доступа или метода, тогда эта строка может вызвать исключение NullReferenceException (то, re получение). Я думаю, что в SO должно быть руководство по разрешению NullReferenceExceptions, просто случайная мысль, поскольку этот комментарий не является материалом ответа, но более ценным, чем фактическое решение. – evanmcdonnal

+0

Проблема, вероятно, заключается в том, как вы извлекаете данные из CRM. Поэтому вы должны, вероятно, показать нам код, который это делает. –

ответ

2

Ваш ParentAccountId вероятно нуль:

if (accountInCrm.ParentAccountId != null && 
    String.IsNullOrEmpty(accountInCrm.ParentAccountId.Id.ToString())) 
       { 
        ... 
       } 
+0

Я отредактировал мое выше сообщение с тем, что я сейчас пытаюсь использовать с помощью! = Null, и все, что я получаю, это «тест 3» в моем раскрывающемся списке ... что означает, что все ParentAccountId имеют значение null, но это просто неверно глядя в CRM. Любая идея, что это может быть? – user2573690

0

Ваш ParentAccountID может быть пустым и, таким образом, вы должны проверить это.

if (accountInCrm.ParentAccountId != null && String.IsNullOrEmpty(accountInCrm.ParentAccountId.Id)) 
{ 
    ... 
} 

Также имейте в виду, что вы не должны пытаться преобразовать ID в строку.
Если ID уже является строкой, тогда на нем нет смысла делать ToString, а если оно равно null, вызов ToString в нулевой ссылке снова приведет к краху вашего кода.
Если ID не является строкой, то вам, вероятно, не позвоните по номеру String.IsNullOrEmpty на нестроковый объект.

+0

Я отредактировал мое выше сообщение с тем, что я сейчас пытаюсь использовать с помощью! = Null, и все, что я получаю, это «тест 3» в моем раскрывающемся списке ... что означает, что все ParentAccountId имеют значение null, но это просто неверно глядя в CRM. Любая идея, что это может быть? – user2573690

+0

Вы уверены, что база данных, на которой вы смотрите, такая же, на которой работает ваш код? Я имею в виду, что иногда вы просматриваете базу данных с помощью диспетчера сервера, которые используют другое соединение, отличное от того, которое используется программой. – Steve

0

Вы делаете свой Linq To CRM все неправильно, выполняя всю свою фильтрацию на стороне клиента. Вы также хотите, чтобы выбрать только те значения, которые вам нужны:

foreach(var account in AccountSet.Where (a => a.StateCode.Value == 0 && a.ParentAccountId != null). 
            Select(a => new Account { Name = a.Name, AccountId = a.AccountId}) 
{ 
    enduserDropdown.Items.Add(new ListItem(accountInCrm.Name, accountInCrm.Id.ToString())); 
} 

Пока enduserDropdown не равно нулю, что не должно быть проблемой.

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

  • Нет связанных вопросов^_^