Mar*_*ark 2 linq dynamics-crm dynamics-crm-2011
我要求查询CRM中没有某种类型的相关实体的记录.通常,我会使用左外连接执行此操作,然后筛选右侧有NULL的所有行.
例如:
var query = from c in orgContext.CreateQuery<Contact>()
join aj in orgContext.CreateQuery<Account>()
on c.ContactId equals aj.PrimaryContactId.Id
into wonk
from a in wonk.DefaultIfEmpty()
where a.Name == null
select new Contact
{
FirstName = c.FirstName,
LastName = c.LastName,
};
Run Code Online (Sandbox Code Playgroud)
这应该返回任何不是帐户主要联系人的Contats.但是,此查询最终会返回所有联系人...!当您查看在SQL事件探查器中生成的SQL时,它会显示如下:
SELECT cnt.FirstName, cnt.LastName
FROM Contact as cnt
LEFT OUTER JOIN Account AS acct
ON cnt.ContactId = acct.PrimaryContactId AND acct.Name is NULL
Run Code Online (Sandbox Code Playgroud)
所以,我得到的左连接OK,但过滤器上的Join条款,而不是在WHEREclause.and没有,因为它应该是这样的:
SELECT cnt.FirstName, cnt.LastName
FROM Contact as cnt
LEFT OUTER JOIN Account AS acct
ON cnt.ContactId = acct.PrimaryContactId
WHERE acct.Name is NULL
Run Code Online (Sandbox Code Playgroud)
显然,此查询的结果非常不同!有没有办法让CRM上的查询生成正确的SQL?
这是底层FetchXML请求的限制吗?
不幸的是,这是CRM的LINQ和FetchXML实现的限制.来自SDK状态的此页面不支持外部联接:
http://technet.microsoft.com/en-us/library/gg328328.aspx
虽然我找不到官方文档,但有很多结果可供人们提及FetchXML不支持左外连接,例如:
http://gtcrm.wordpress.com/2011/03/24/fetch-xml-reports-for-crm-2011-online/
| 归档时间: |
|
| 查看次数: |
6227 次 |
| 最近记录: |