对象引用未设置为对象的实例 - C#错误

时间:2013-11-21 23:44:52

标签: c# dynamics-crm-2011 object-reference

我知道这会被问到很多,而且我已阅读过类似的帖子,但我无法弄清楚我的错误。我得到的Object引用没有设置为带有.aspx.cs文件的对象错误的实例。

以下是我的代码片段...... 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 If语句一切正常,并且值被添加到我的下拉列表中。

任何想法会导致什么?

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

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,有些会这样做,但大多数帐户都没有。

3 个答案:

答案 0 :(得分:2)

您的ParentAccountId可能为空:

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

答案 1 :(得分:0)

您的ParentAccountID可能为空,因此您需要检查它。

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

另请注意,您不应尝试将ID转换为字符串 如果ID已经是一个字符串,则对其执行ToString没有任何意义,如果它为null,则在空引用上调用ToString将再次崩溃您的代码。
如果ID不是字符串,那么您可能不应该在非字符串对象上调用String.IsNullOrEmpty

答案 2 :(得分: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不为null,就不应该成为问题。