我正在运行针对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)
{
}
知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:2)
看起来CRM Linq提供商的功能有限且查询过于复杂。尝试使用FetchXml。
答案 1 :(得分:1)
问题不在于Linq提供商,而是EntityReference
的问题。幸运的是没有关于它的文档,但我最好的猜测是,因为没有EntityReference
的构造函数来取名,所以它通常为null,除非它以其他方式填充。
但无论如何,这仍然可以通过linq完成,就像通过fetchxml完成一样 - 通过查询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"]
};