3

我正在对 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)
        {
        }

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

谢谢!

4

2 回答 2

2

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

于 2012-05-30T13:22:03.843 回答
1

问题不在于 Linq 提供程序,而在于EntityReferences. 不幸的是,没有关于它的文档,但我最好的猜测是,由于没有构造函数用于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"]
                };
于 2012-05-30T14:28:43.127 回答