无效的CRM 2011 LINQ查询:"无效",其中'条件.实体成员正在调用无效的属性或方法."

Rya*_*yan 8 linq crm dynamics-crm dynamics-crm-2011

我正在尝试执行此查询以检索特定实体类型的审核项目

public List<Audit> GetAuditChangesSince(DateTime since, string entityType)
{
    return (from a in OrgContext.CreateQuery<Audit>()
        where
            a.ObjectId != null && a.ObjectId.LogicalName == entityType &&
            a.CreatedOn > since
        select a).ToList();
}
Run Code Online (Sandbox Code Playgroud)

a.ObjectId!= NULL && a.ObjectId.LogicalName ==的EntityType &&条款导致的问题.我知道.Equals()可能会导致问题(因此==)并且LINQ提供程序存在以下限制:

子句的左侧必须是属性名称,子句的右侧必须是值

左侧是属性,右侧是常量.是.ObjectId.LogicalName导致问题吗?

Got*_*bbs 7

由于审计实体不为特定记录所涉及的实体的逻辑名称/类型代码提供地面属性,因此您在此处可以做的最好的事情是链接到您希望定位的实体(或实体)审计记录 - 即没有检索所有记录.

这种情况的一般技术是,您可以链接到具有半无意义条件的相关实体,例如检查主键是否为空.对于您的情况,只需链接即可.

拉动与联系人关联的审计记录的示例:

from a in OrgContext.CreateQuery<Audit>()
join c in ContactSet on a.ObjectId.Id equals c.ContactId
where a.ObjectId != null && a.CreatedOn > since
select a
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答.你能用"地面属性"来解释你的意思吗?谢谢. (2认同)
  • 没问题!我的意思是,正如您在问题中所建议的那样,由于审计实体上没有与审计记录相关的实体的逻辑名称/类型代码的实际属性,因此无法直接过滤审计实体.在查询CRM时,我们必须将"EntityReference"类型的字段视为只能通过其`Id`属性进行查询.与该Id关联的记录类型的元数据是从我们抽象出来的,并且在这种情况下不能直接查询.如果我能进一步澄清,请告诉我! (2认同)