如果结果为NULL,则LINQ在Any()上出错

时间:2012-03-13 22:23:16

标签: c# linq

我有一个LINQ查询,在某些情况下它不返回任何值。所以我使用Any()来检查,以便我可以相应地处理代码。但是,当我使用Any()Count()时,我收到以下错误:

{"Value cannot be null.\r\nParameter name: g"}

这是我正在使用的代码:

var cQuery = (from a in gServiceContext.CreateQuery("contact")
where ((((EntityReference)a["accountid"]).Id.Equals(new Guid(p.AccountGuid))) &&
((a["firstname"].Equals(p.FirstName) && a["lastname"].Equals(p.LastName) && a["address1_stateorprovince"].Equals(p.State)) || (a["emailaddress1"].Equals(p.Email))))
    select new
        {
            ContactId = !a.Contains("contactid") ? string.Empty : a["contactid"],
        FirstName = !a.Contains("firstname") ? string.Empty : a["firstname"],
        LastName = !a.Contains("lastname") ? string.Empty : a["lastname"],
        State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
        Email = !a.Contains("emailaddress1") ? string.Empty : a["emailaddress1"]
    }).DefaultIfEmpty();

if (cQuery.ToList().Any())
    {
        // Do something if I get results
    } else {
      // Something else if no results
    }

任何想法我做错了什么?似乎它应该适合我。在它出错的情况下。它将返回没有结果,所以我希望它跳过if中的最新情况。但在其他情况下会有结果。谢谢!

更新:

我知道代码很难看。遗憾。

看起来问题是:

where ((((EntityReference)a["accountid"]).Id.Equals(new Guid(p.AccountGuid)))

看起来在哪里获得NULL。我将如何处理,以便错误不会弹出?

2 个答案:

答案 0 :(得分:6)

参数名称“g”是new Guid(string g)构造函数中参数的名称。

因此,我怀疑你的根本原因实际上是P.AccountGuid在某些情况下为空。

答案 1 :(得分:0)

为什么不改用ToList功能?

            var cQuery = (from a in gServiceContext.CreateQuery("contact")
                      where ((((EntityReference)a["accountid"]).Id.Equals(new Guid(p.AccountGuid))) &&
                      ((a["firstname"].Equals(p.FirstName) && a["lastname"].Equals(p.LastName) && a["address1_stateorprovince"].Equals(p.State)) 
                      || (a["emailaddress1"].Equals(p.Email))))
                      select new
                      {
                          ContactId = !a.Contains("contactid") ? string.Empty : a["contactid"],
                          FirstName = !a.Contains("firstname") ? string.Empty : a["firstname"],
                          LastName = !a.Contains("lastname") ? string.Empty : a["lastname"],
                          State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
                          Email = !a.Contains("emailaddress1") ? string.Empty : a["emailaddress1"]
                      }).ToList();

        if (cQuery.Count > 0)
        {
            // Do something if I get results
        }
        else
        {
            // Something else if no results
        }