我正在尝试下拉联系人的NULLS,我正在使用DefaultIfEmpty来执行此操作。但是我收到了这个错误。
“方法'GroupJoin'不能遵循'Join'方法或不支持。尝试根据支持的方法编写查询或在调用不支持的方法之前调用'AsEnumerable'或'ToList'方法。”
我正在使用LINQ-to-CRM提供程序并从CRM 2011 Web Service查询。
这是我正在使用的代码:
var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
join a in orgServiceContext.CreateQuery("account") on ((EntityReference)r["accountid"]).Id equals a["accountid"]
join c in orgServiceContext.CreateQuery("contact") on ((EntityReference)r["new_contact"]).Id equals c["contactid"]
where ((EntityReference)r["new_channelpartner"]).Id.Equals(new Guid("c55c2e09-a3be-e011-8b2e-00505691002b"))
select new
{
OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
Source = !r.Contains("new_source") ? string.Empty : r["new_source"],
CreatedOn = !r.Contains("createdon") ? string.Empty : r["createdon"],
State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
Zip = !a.Contains("address1_postalcode") ? string.Empty : a["address1_postalcode"],
Eval = !r.Contains("new_colderevaluation") ? string.Empty : r.FormattedValues["new_colderevaluation"],
DistributorName = !r.Contains("new_channelpartner") ? string.Empty : ((EntityReference)r["new_channelpartner"]).Name,
ContactStreetAddress = !c.Contains("address1_line1") ? string.Empty : c["address1_line1"]
});
我如何摆脱这个错误?任何帮助都会很棒。
谢谢!
答案 0 :(得分:2)
由于您的LINQ查询必须最终转换为有效的QueryExpression,因此您无法执行某些更高级的投影内容,因为OrganizationDataContext不够智能,无法运行简单的QueryExpression,然后应用您的乐趣“fieldname = !c.Contains("fieldname") ? string.Empty : c["fieldname"]
“ 在记忆中。你必须自己做。
因此,在您的第一个查询中,只需执行:
var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
// snip
select new
{
fieldname = c["fieldname"],
//etc...
});
然后执行以下操作:
var linqQuery2 = from r in linqQuery.ToList()
select new
{
fieldname = r["fieldname"] == null ? string.Empty : r["fieldname"],
//(etc)...
};