【问题标题】:LINQ to CRM - OR in Where clauseLINQ to CRM - 或在 Where 子句中
【发布时间】:2012-05-02 22:19:31
【问题描述】:

我正在尝试使用 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();

这会产生以下错误消息:

'Contact' 实体不包含 Name = 'cga_statuschangedate' 的属性。

我不知道如何对两个不同的实体进行 OR。 MSDN 说每个实体都需要 WHERE 子句:

where 子句

为了过滤结果集,可以针对一个或多个实体添加 where 子句。每个 where 子句只能包含针对单个实体类型的条件。 >涉及多个实体的复合条件无效。相反,每个实体 > 应该在单独的 where 子句中过滤。

http://msdn.microsoft.com/en-us/library/ff681565.aspx

还有其他方法可以实现我的需要吗?

【问题讨论】:

    标签: linq dynamics-crm-2011 dynamics-crm crm microsoft-dynamics


    【解决方案1】:

    不幸的是,您无法在单个 linq 语句中实现您想要的,因为他们使用的 liunq 提供程序归结为 fetchXML,而 fetchXML 不支持您正在使用的场景。

    更多细节... Fetch 为您提供实体或链接实体内部的条件。这些条件元素中不能有来自其他链接实体的属性,只有直接父实体或链接实体。 Here is one of many microsoft forum posts referencing this limitation of fetchXML

    可能不是您要寻找的答案,嗯?作为一个丑陋的替代方案,您可以运行两个单独的查询并在内存中进行过滤(这可能会损害性能)。或者更好的是,如果您是本地部署,您可以针对过滤后的视图编写一些 sql。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多