我正在尝试使用 LINQ 从 Dynamics CRM 2011 获取一些数据。目标是获取自特定日期以来发生更改或子实体(PERC 文件)自同一日期以来发生更改的所有联系人记录。查询看起来像这样:
// Bring all students who have changes (at Contact entity) after specific date
// momentInTime or the status of any of their perc files has been changed since
// that date
var students = (from c in ContactSet
join pl in cga_portallogonSet on c.Id equals pl.cga_ContactId.Id
join ef in cga_percfileSet on c.Id equals ef.cga_StudentId.Id
where
(pl.cga_PortalLogonRole.Value == 284970000) // student
where
(c.ModifiedOn >= momentInTime || c.CreatedOn > momentInTime)
||
(ef.cga_statuschangedate >= momentInTime)
select c.cga_StudentNumber).Distinct().ToList();
这会产生以下错误消息:
“联系人”实体不包含名称 =“cga_statuschangedate”的属性。
我不知道如何对两个不同的实体进行 OR 操作。 MSDN 说每个实体都需要 WHERE 子句:
where 子句
为了过滤结果集,可以针对一个或多个 > 实体添加 where 子句。每个 where 子句只能包含针对单个实体类型的条件。 >涉及多个实体的复合条件无效。相反,每个实体 > 应该在单独的 where 子句中进行过滤。
http://msdn.microsoft.com/en-us/library/ff681565.aspx http://msdn.microsoft.com/en-us/library/ff681565.aspx
还有其他方法可以实现我的需要吗?
不幸的是,您无法在单个 linq 语句中实现您想要的目标,因为他们使用的 linq 提供程序归结为 fetchXML,而 fetchXML 不支持您正在使用的场景。
更多细节... Fetch 为您提供实体或链接实体内部的条件。这些条件元素中不能包含来自其他链接实体的属性,只能包含直接父实体或链接实体的属性。这是引用 fetchXML 限制的许多微软论坛帖子之一 http://social.microsoft.com/Forums/uk/crmdevelopment/thread/de488189-a44f-4a33-be55-cb9d6c0f1659
可能不是您正在寻找的答案,是吗?作为一个丑陋的替代方案,您可以运行两个单独的查询并在内存中进行过滤(这可能会对性能造成损害)。或者更好的是,如果您是本地部署,您可以针对过滤的视图编写一些 sql。祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)