gpt4 book ai didi

c# - 使用 DefaultIfEmpty 时出现 LINQ 错误

转载 作者:行者123 更新时间:2023-11-30 17:16:31 26 4
gpt4 key购买 nike

我正在尝试拉下联系人的 NULLS,我正在使用 DefaultIfEmpty 来执行此操作。但是我收到了这个错误。

“方法‘GroupJoin’不能跟在方法‘Join’之后或不受支持。尝试根据支持的方法编写查询,或者在调用不受支持的方法之前调用‘AsEnumerable’或‘ToList’方法。”

我正在使用 LINQ-to-CRM 提供程序并从 CRM 2011 Web 服务进行查询。

这是我使用的代码:

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"]
});

我将如何摆脱这个错误?任何帮助都会很棒。

谢谢!

最佳答案

由于您的 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)...
};

关于c# - 使用 DefaultIfEmpty 时出现 LINQ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com