“where”条件无效。实体成员正在调用无效的属性或方法。 LINQ查询出错

时间:2012-05-30 02:43:08

标签: dynamics-crm dynamics-crm-2011

我正在运行针对CRM 2011的linq查询,我不断收到此错误:

'where'条件无效。实体成员正在调用无效的属性或方法。

我的代码如下所示:

        try
        {

            string rsmName = "Bob Harrison";
            var linqQuery = (from r in gServiceContext.CreateQuery("opportunity")
                             join c in gServiceContext.CreateQuery("account") on ((EntityReference) r["accountid"]).Id equals c["accountid"] into opp
                             from o in opp.DefaultIfEmpty()
                             where ((EntityReference)r["ownerid"]).Name.Equals(rsmName)
                             select new
                                        {
                                            AccountId = !r.Contains("accountid") ? string.Empty : r["accountid"],
                                            Account = !o.Contains("name") ? string.Empty : o["name"]
                                        });

            ddlCustomer.DataSource = linqQuery;
            ddlCustomer.DataValueField = "AccountId";
            ddlCustomer.DataTextField = "Account";
            ddlCustomer.DataBind();
        }
        catch (Exception ex)
        {
        }

知道如何解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

看起来CRM Linq提供商的功能有限且查询过于复杂。尝试使用FetchXml

答案 1 :(得分:1)

问题不在于Linq提供商,而是EntityReference的问题。幸运的是没有关于它的文档,但我最好的猜测是,因为没有EntityReference的构造函数来取名,所以它通常为null,除非它以其他方式填充。

但无论如何,这仍然可以通过完成,就像通过完成一样 - 通过查询SystemUser表。见下文(你必须翻译成后期绑定)。

var linqQuery = from r in gServiceContext.OpportunitySet
                join c in gServiceContext.AccountSet on r.AccountId.Id equals c.AccountId into opp
                from o in opp.DefaultIfEmpty()
                where o.OwnerId.Id == gServiceContext.SystemUserSet.Single(y => y.FullName.Equals(rsmName)).SystemUserId
                select new
                {
                    AccountId = !r.Contains("accountid") ? string.Empty : r["accountid"],
                    Account = !o.Contains("name") ? string.Empty : o["name"]
                };