我得到一个“方法'加入'不受支持”错误...有趣的是,我只是将第一个LINQ转换为第二个版本,它不起作用......
我想要的是LINQ版本#3,但它也不起作用......
这有效
var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on s["bh_contract"] equals b["bh_contract"]
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};
这不是
var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on new { contractid = s["bh_contract"] }
equals new { contractid = b["bh_contract"] }
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};
此外,这不是,这是一个复合连接和我真正的目标
var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on new { contractid = s["bh_contract"], serviceid = s["serviceid"] }
equals new { contractid = b["bh_contract"], serviceid = s["serviceid"] }
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};
我尝试过早期绑定但仍无法正常工作......
var query_join9 = from s in orgSvcContext.CreateQuery<ServiceAppointment>()
join b in orgSvcContext.CreateQuery<bh_product>()
on new { foo = s.bh_contract.Id }
equals new { foo = b.bh_Contract.Id }
where s.bh_contract.Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};
stil not working
var query_join9 = from s in orgSvcContext.CreateQuery<ServiceAppointment>()
join b in orgSvcContext.CreateQuery<bh_product>()
on new { s.bh_contract.Id, s.ServiceId }
equals new { b.bh_Contract.Id, ServiceId = b.bh_Service }
where s.bh_contract.Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};
但我只是想在这里做一些例子How to do joins in LINQ on multiple fields in single join
我缺少什么?
提前致谢
答案 0 :(得分:1)
虽然我不完全确定您使用的是哪种CRM,但我认为您误解了某些内容。
为了使LINQ查询起作用,需要为底层数据源提供LINQ提供程序 - 负责转换例如链的数据源的代码位。 Join
,Where
,运算符使用等等,进入数据源的查询API。这可能是SQL,一些自定义查询语言或某些方法链。
两个LINQ提供程序(例如,一个用于LINQ to DataSet
和一些您自己编写的自定义提供程序)不必支持相同的方法和其他代码。 LINQ提供程序支持的LINQ方法(和/或其他嵌入语句)的精确子集取决于其实现。
就这样看,你使用的LINQ提供程序似乎并不理解使用多个字段的连接的标准语法,或者似乎根本不理解匿名类型的用法并不令人惊讶
我的建议是搜索提供的LINQ提供程序的文档,以查看它支持哪些查询操作(可能有关于此特定查询模式不受支持的说明)。如果做不到这一点,你将不得不诉诸某种其他问题 - 一个不涉及等值的问题。也许您最好的选择是单独执行连接,然后与两个结果组相交。这实际上取决于具体情况。
答案 1 :(得分:1)
你看过MSDN samples了吗?那里有一些多列连接示例:
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var list_join = (from a in svcContext.AccountSet
join c in svcContext.ContactSet
on a.PrimaryContactId.Id equals c.ContactId
where a.Name == "Contoso Ltd" && <<--- multiple join here
a.Address1_Name == "Contoso Pharmaceuticals"
select a).ToList();
foreach (var c in list_join)
{
System.Console.WriteLine("Account " + list_join[0].Name
+ " and it's primary contact "
+ list_join[0].PrimaryContactId.Id);
}
}