C#CRM查询表达式链接实体通过多字段联接

C#CRM查询表达式链接实体通过多字段联接,c#,dynamics-crm,crm,C#,Dynamics Crm,Crm,是否可以在CRM中动态连接多个字段 我的意思是在SQL中是这样的 select field1, field2, ..., fieldN from ServiceAppointment inner join bh_product on bh_product.bh_contract = ServiceAppointment.bh_product.bh_contract and bh_product.serviceid = ServiceAppointment.serviceid 我正试图用quer

是否可以在CRM中动态连接多个字段

我的意思是在SQL中是这样的

select field1, field2, ..., fieldN
from ServiceAppointment
inner join bh_product
on bh_product.bh_contract = ServiceAppointment.bh_product.bh_contract
and bh_product.serviceid = ServiceAppointment.serviceid
我正试图用queryexpression实现上面的功能,但是我没有达到我想要的行为,我的记录比预期的要多。如果我事先知道字段编号2的值,我可以这样做,但在运行时我不知道,查询必须连接两个字段。我的实际代码如下,减去我想不出来的部分

这不管用。。。我只希望有两张唱片,但我有几百张

var leContact = new LinkEntity(ServiceAppointment.EntityLogicalName, ActivityParty.EntityLogicalName, "activityid", "activityid", JoinOperator.Inner);
leContact.LinkCriteria = new FilterExpression();
leContact.LinkCriteria.AddCondition("partyid", ConditionOperator.Equal, contactId);
queryExpression.LinkEntities.Add(leContact);
result = GetServiceActivityList(queryExpression);

var leService = new LinkEntity(ServiceAppointment.EntityLogicalName, BrightHorizons.Shared.CRM.Interface.Service.EntityLogicalName, "serviceid", "serviceid", JoinOperator.Inner);
queryExpression.LinkEntities.Add(leService);
result = GetServiceActivityList(queryExpression);

// THIS IS THE PROBLEM    
    var leProduct = new LinkEntity(ServiceAppointment.EntityLogicalName, bh_product.EntityLogicalName, "bh_contract", "bh_contract", JoinOperator.Inner);
    var leProduct2 = new LinkEntity(ServiceAppointment.EntityLogicalName, bh_product.EntityLogicalName, "serviceid", "bh_service", JoinOperator.Inner);
    queryExpression.LinkEntities.Add(leProduct2);
    queryExpression.LinkEntities.Add(leProduct);
    result = GetServiceActivityList(queryExpression);

//THIS ALSO DOESNT WORK 
    var leProduct = new LinkEntity(ServiceAppointment.EntityLogicalName, bh_product.EntityLogicalName, "bh_contract", "bh_contract", JoinOperator.Inner);
    leProduct.AddLink(bh_product.EntityLogicalName, "bh_service", "bh_service", JoinOperator.Inner);
    queryExpression.LinkEntities.Add(leProduct);
    result = GetServiceActivityList(queryExpression);

我做错了什么?

我不确定您是否对此进行了调查,但在Linq()中,连接非常容易。我写过这样的联系人帐户连接:

var appContacts = (
from c in ctx.contacts
join a in ctx.accounts on c.contactid equals a.primarycontactid
where a.name.Contains("Contoso")
select new { c.contactid, c.fullname }).ToList());

有一个问题。

根据这篇文章,这篇文章说在FetchXML中不可能跨多个列进行连接,但在Linq中是不可能的。我不确定你想表达什么观点?请看下面的帖子,告诉我你的想法:)回答者指出Linq提供者可以实现功能的一个子集。CRM Linq提供商就是这样。我链接的MSDN示例提供了一个可以使用Linq for CRM的方法列表。