2013-11-21 184 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如果声明一切都很好,和值添加到我的下拉。

任何想法会造成这种情况?

编辑:------------------

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()));  
     } 
    } 
} 

编辑2:从-------------检索数据CRM

var context = new XrmServiceContext(); 

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

该循环遍历CRM中的每个帐户记录。我确信,CRM中并非所有帐户都有空白的父帐户ID,但有些帐户只有大部分帐户没有。

+4

假设ID只是一个字符串值,那么它似乎ParentAccountID为空 – Steve

+2

只是fyi可能是C#中最常见的异常。当你得到它时,有一些简单的步骤来解决它。首先,找到哪一行导致错误,然后在附近的任何引用上寻找属性访问/方法调用,如果任何引用在访问或方法调用之前未检查为无效,那么该行可能会引发NullReferenceException(您的“重新获得)。我认为SO应该提供解决NullReferenceExceptions的指南,只是一个随机的想法,因为这个评论不是答案材料,但比实际的解决方案更有价值。 – evanmcdonnal

+0

问题可能在于您从CRM中检索数据的方式。所以你应该向我们展示那些代码。 –

回答

2

ParentAccountId可能是空:

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

我已经使用!= null编辑了我上面的帖子,我正在使用的是!“”我的下拉列表中显示的是“test 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编辑了我的上面的帖子,我正在使用的是“test 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不为空即不应该成为问题。

相关问题