CRM 2011中具有四个实体和多个where子句的左外连接LINQ查询
我在Microsoft Dynamics CRM 2011中遇到了一个问题 这里我有一套账户,其中有许可证,许可证ae与许可证国家有关,许可证国家与县有关 我希望得到这样的查询输出 但这是不恰当的CRM 2011中具有四个实体和多个where子句的左外连接LINQ查询,linq,linq-to-sql,linq-to-entities,dynamics-crm-2011,Linq,Linq To Sql,Linq To Entities,Dynamics Crm 2011,我在Microsoft Dynamics CRM 2011中遇到了一个问题 这里我有一套账户,其中有许可证,许可证ae与许可证国家有关,许可证国家与县有关 我希望得到这样的查询输出 但这是不恰当的 strSearch="Some text"; var lstItems = (from county in x.De_countySet join permitcounty in x.de_permitcountySet on county.De_countyId e
strSearch="Some text";
var lstItems = (from county in x.De_countySet
join permitcounty in x.de_permitcountySet on county.De_countyId equals permitcounty.de_CountyId.Id
join permit in x.de_permitSet on permitcounty.de_PermitId.Id equals permit.de_permitId
join account in x.AccountSet on permit.de_AccountId.Id equals account.AccountId into outer
where permit.de_Type.Equals("Type1") && permit.statuscode.Equals("Active") // Permit Type as Type1 and Status as Active
where account.De_LegalName.Contains(strSearch) || account.Name.Contains(strSearch) // Search in Legal Name and Account full name
where county.de_CountyName.Contains(strSearch) // Search in County Name
orderby county.de_CountyName
from account in outer.DefaultIfEmpty()
select new clsTemp
{
Name = account.Name,
De_LegalName = account.De_LegalName,
Address1_Line1 = account.Address1_Line1,
Address1_City = account.Address1_City,
Address1_PostalCode = account.Address1_PostalCode,
de_CountyName = county.de_CountyName
}).ToList();
感谢您的帮助
Vinu这里有一种编写组连接的替代方法。请注意,包含
到的行是唯一被替换的行:
strSearch="Some text";
var lstItems = (from county in x.De_countySet
join permitcounty in x.de_permitcountySet on county.De_countyId equals permitcounty.de_CountyId.Id
join permit in x.de_permitSet on permitcounty.de_PermitId.Id equals permit.de_permitId
let outer = x.AccountSet.Where(account => permit.de_AccountId.Id == account.AccountId)
where permit.de_Type.Equals("Type1") && permit.statuscode.Equals("Active") // Permit Type as Type1 and Status as Active
// "account" is not in scope and should cause a design-time error
where account.De_LegalName.Contains(strSearch) || account.Name.Contains(strSearch) // Search in Legal Name and Account full name
where county.de_CountyName.Contains(strSearch) // Search in County Name
orderby county.de_CountyName
from account in outer.DefaultIfEmpty()
select new clsTemp
{
Name = account.Name,
De_LegalName = account.De_LegalName,
Address1_Line1 = account.Address1_Line1,
Address1_City = account.Address1_City,
Address1_PostalCode = account.Address1_PostalCode,
de_CountyName = county.de_CountyName
}).ToList();
以这种方式编写时,会发现一个明显的错误(account
不在范围内)。也许还有其他问题。没有任何许可证的县将不会显示,而有多个许可证但没有任何帐户的县将有多行空白帐户。这是您想要的功能吗
编辑:第二次尝试:
strSearch="Some text";
var lstItems = (from county in x.De_countySet
join permitcounty in x.de_permitcountySet on county.De_countyId equals permitcounty.de_CountyId.Id
join permit in x.de_permitSet on permitcounty.de_PermitId.Id equals permit.de_permitId
where permit.de_Type.Equals("Type1") && permit.statuscode.Equals("Active") // Permit Type as Type1 and Status as Active
where county.de_CountyName.Contains(strSearch) // Search in County Name
orderby county.de_CountyName
from account in x.AccountSet.Where(account =>
permit.de_AccountId.Id == account.AccountId &&
(account.De_LegalName.Contains(strSearch) ||
account.Name.Contains(strSearch))).DefaultIfEmpty() // Search in Legal Name and Account full name
select new clsTemp
{
Name = account.Name,
De_LegalName = account.De_LegalName,
Address1_Line1 = account.Address1_Line1,
Address1_City = account.Address1_City,
Address1_PostalCode = account.Address1_PostalCode,
de_CountyName = county.de_CountyName
}).ToList();
你能帮我把它弄好吗?什么使它“不合适”?结果集是否不正确?是否存在异常?“GroupJoin”方法无法遵循方法“Join”或不受支持。请尝试使用支持的方法编写查询,或在调用不支持的方法之前调用“ASEUMENUMER”或“ToList”方法,“这是我试图用x.DecountySet等“ToList”更新查询的错误消息,但是没有用,x.De_countySet
,x.De_permitcountset
,x.De_permitSet
,x.AccountSet
的确切类型是什么?听起来至少有一家不支持LINQ。所有这些都是CRM 2011实体setsHi Risky Martin,非常感谢您的建议。当我尝试实现更改以及尝试访问网页时,我得到了如下错误:“System.NotSupportedException:方法'Where'不能跟随方法'Select'或不受支持。请尝试使用受支持的方法编写查询,或在调用不受支持的方法之前调用'AsEnumerable'或'ToList'方法。”. 我已通过“Name=account[“Name”]==null?null:account[“Name”]。ToString(),”修改了选择以处理空值结果是同样的错误我期望和你一样的结果explained@Vinu看起来我们必须不断尝试不同的方法,直到找到一种它喜欢的方法。@RiskyMartin-你似乎对这方面相当了解。你能看看我的问题,看看你是否能解释一下: