【问题标题】:How can I get an entity with linq-query that is not in context?如何使用不在上下文中的 linq-query 获取实体?
【发布时间】:2019-04-13 19:19:23
【问题描述】:

我的插件在“创建”-xxx-Entity 时触发。在 ServiceContext 我有只属于这个实体的笔记。但例如,我想要 CRM 中的所有注释或属于不在 ServiceContext 中的另一个实体的所有记录。如何找回?

var ServiceContext = new OrganizationServiceContext(service);

 var notes = from n in ServiceContext.CreateQuery("annotation")
 where n["objectid"] == new EntityReference("xxx", xxx.Id)
                            select n;

【问题讨论】:

  • 请提供更多背景信息,以说明您要执行的操作。我不太明白。但是,我注意到的一件事是,您的检查总是会失败。您正在创建一个新对象并检查现有对象是否等于它。我建议使用Object.Equals 方法进行此类检查。
  • 感谢您的回答,此代码运行良好。所以它不是关于“相等”或“==”,而是关于存在于 ServiceContext 中的对象。问题是,一旦触发插件,我只能检索 ServiceContext 中的对象。但我实际上想在 crm 中获取所有笔记(对象)。

标签: c# linq dynamics-crm crm


【解决方案1】:

OrganizationServiceContext 可以无限制地查询任何实体。您可以使用相同的查询,只需删除 where 子句即可获得所有注释:

var query = from n in ServiceContext.CreateQuery("annotation")
            select n;
var allNotes = query.ToList();

或者,对于与另一条记录相关的注释:

var query = from n in ServiceContext.CreateQuery("annotation")
where n.GetAttributeValue<EntityReference>("objectid").Id.Equals(myObjectId)
select n;

对于带有附件的笔记,除非您需要 documentbody,否则将其排除在查询之外可以加快处理速度。

【讨论】:

  • 非常感谢,因为我是初学者,所以我有一个问题,您更喜欢在CRM中查询什么:Fetch xml、linq 或QueryExpression?
  • 很高兴为您提供帮助。如果您了解 LINQ,那通常是快速查询数据的最简单方法。在 LINQ 之外,我通常会使用 FetchXML 来处理聚合之类的事情。查询表达式也不错,但对于复杂的查询可能会有点冗长。
  • 只是建立在@Aron 评论的基础上,如果您选择使用 FetchXML,那么您还可以使用 CRM 中的高级查找来帮助您入门。您只需在 UI 中构建查询并使用“下载 Fetch XML”按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 2014-11-11
相关资源
最近更新 更多