use*_*405 3 linq microsoft-dynamics crm dynamics-crm dynamics-crm-2011
我正在尝试使用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();
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误消息:
'Contact'实体不包含Name ='cga_statuschangedate'的属性.
我无法弄清楚如何在两个不同的实体上进行OR.MSDN说你需要每个实体的WHERE子句:
条款
为了过滤结果集,可以在一个或多个>实体中添加子句.每个where子句只能包含针对单个实体类型的条件.>涉及多个实体的复合条件无效.相反,每个实体>应该在单独的where子句中进行过滤.
http://msdn.microsoft.com/en-us/library/ff681565.aspx
有没有另一种方法来实现我的需要?
不幸的是,你无法在单个linq语句中实现你想要的,因为他们使用的liunq提供程序归结为fetchXML,而fetchXML不支持你正在使用的场景.
更多细节...... Fetch为您提供实体或链接实体内部的条件.这些条件元素不能包含来自其他链接实体的属性,只能包含直接父实体或链接实体.以下是引用fetchXML限制的众多微软论坛帖子之一
可能不是你要找的答案,嗯?作为一个丑陋的替代方案,您可以运行两个单独的查询并在内存中进行过滤(这可能与性能有关).或者更好的是,如果您是内部部署,则可以针对过滤后的视图编写一些sql.祝好运.
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |