2013-04-29 4 views
0

Ive только начал входить в LINQ to CRM за последние 48 часов и может сделать небольшую помощь.EntityReference вызывает ошибку времени выполнения

Ive построил следующий запрос, который дает мне кучу данных о каждом контакте и их компании из CRM:

var contacts = 
     (
      from c in context.ContactSet 
      join m in context.py3_membershipSet on c.ContactId equals m.py3_Member.Id 
      where m.statuscode.Value == 1 
      orderby c.LastName 
      select new 
      { 
       FirstName = c.FirstName, 
       LastName = c.LastName, 
       BranchCode = c.py3_BranchArea, 
       Branch = (c.FormattedValues.Contains("py3_brancharea") ? c.FormattedValues["py3_brancharea"] : "N/a"), 
       JobTitle = c.JobTitle, 
       Organisation = c.ParentCustomerId.Name, 
       joinedAsCode = c.py3_SOLACEMemberJoinedAs, 
       JoinedAs = (c.FormattedValues.Contains("py3_solacememberjoinedas") ? c.FormattedValues["py3_solacememberjoinedas"] : "N/a"), 
       Expertise = c.py3_SOLACEMemberAreasofExpertise 
      } 
     ); 

Я затем использовать простой Еогеасп Перебери каждую запись и записать его:

foreach (var a in contacts) 
     { 
      Response.Write("<span style='font-size:small'>Firstname: " + a.FirstName + " | LastName: " + a.LastName + " | Job Title: " + a.JobTitle + "| Org: " + a.Organisation + " | Branch: " + a.Branch + " | Expertise: " + a.Expertise + " | Membership Product: " + a.JoinedAs + "</span><br/>"); 
     } 

Однако при запуске страницы я получаю ошибку «ссылка на объект, не установленную на экземпляр объекта». Ошибка дает следующую информацию, которая в настоящее время ничего не значит для меня:

[NullReferenceException: Object reference not set to an instance of an object.] 
lambda_method(Closure , <>f__AnonymousTypef`2) +658 

от процесса ликвидации, я знаю, что проблемы заключается в попытке выписать «a.Organisation», которая относится к «c.ParentCustomerId. Имя»

Usinq LINQPad Я могу видеть, что это LINQ воспитывает ParentCustomerId и показывает, что он имеет четыре детей, а именно:

  • Id
  • LogicalName
  • Название
  • данных расширения

Так что я знаю, что я хочу «c.ParentCustomerId.Name», однако я не уверен, почему Im имея этот вопрос. Возможно ли это, но маловероятно, что некоторые записи (сущности?) Не имеют значения для этого.

Есть ли что-то, что я не делаю правильно с точки зрения захвата этих данных, или это просто, что я не заселяю его каким-то стандартным данным, когда запись пуста/null?

ответ

0

Вам просто нужно добавить несколько охранников, когда вы используете Содержит или доступа дочерние свойства на то, что может или не может быть пустым:

FirstName = c.FirstName, 
LastName = c.LastName, 
BranchCode = c.py3_BranchArea, 
Branch = (c.FormattedValues != null && 
      c.FormattedValues.Contains("py3_brancharea") ? 
      c.FormattedValues["py3_brancharea"] : "N/a", 
JobTitle = c.JobTitle, 
Organisation = c.ParentCustomerId != null ? c.ParentCustomerId.Name : "N/a", 
// ... 
+0

Сво не FormattedValues ​​Thats вызывает проблему. Это касается Организации, как указано в моем ОП. Branch and RegistrationAs работают нормально и отлично справляются с нулями. Ive пробовал аналогичный подход с организацией, и он по-прежнему вызывает ту же ошибку. –

+0

@PhillHealey - Это был основной пример. Я также расширил его, чтобы охватить Организацию. Это хорошая практика, чтобы использовать их везде, где вы могли бы пробежать нуль. –

+0

Хорошо, я понимаю, что вы сейчас делаете. Тем не менее, Ive попробовал это предложение для организации ранее, и он по-прежнему бросает ту же ошибку. –

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