OrganizationServiceContext.CreateQuery 与 Fetch

and*_*eer 5 c# linq dynamics-crm

希望有人可以从性能的角度对 using OrganizationServiceContext.CreateQueryvs using FetchXML(or QueryExpression)有所了解。

我已经广泛使用了LINQCRM ,但我是新手。CreateQuery看起来很适合我的技能,但我想知道最终的表现。

我直接意识到

var result = from e in orgContext.CreateQuery("xyz_myentity")
             where e["email"] == "someone@example.com"
             select e;
Run Code Online (Sandbox Code Playgroud)

将返回 的所有属性xyz_myentity,但我似乎找不到位于 CRM 之上的 LINQ 提供程序的任何文档。使用匿名类型会限制从 SQL/CRM 返回的属性吗?或者在从服务器返回完整的数据集后,“客户端”端正在完成魔术吗?是否对所有属性进行 SQL 查询,然后 LINQ 提供程序是否在此基础上构建匿名类型?

var result = from e in orgContext.CreateQuery("xyz_myentity")
             where e["email"] == "someone@example.com"
             select new { Name=e["xyz_name"] };
Run Code Online (Sandbox Code Playgroud)

是否还有其他与引入 相关的考虑因素OrganizationServiceContext

Hen*_*jen 5

用于 CRM 的 LINQ 建立在 CRM 之上,QueryExpression因此具有几乎相同的限制。它在 Microsoft.Xrm.Sdk 库中在客户端实现。库将QueryExpression请求发送到 CRM Web 服务。

LINQ 向查询堆栈添加了一个抽象层(LINQ -> QueryExpression -> SQL),因此您可以预期性能会有所下降。

FetchXML是可用于查询 CRM 的最古老的技术。微软表示它在服务器上的性能稍差。编写 FetchXml 查询归结为构造 XML 消息,因此通常编程经验很差。

OrganizationServiceContext需要处理LINQ查询; 它是一个能够跟踪数据对象变化的对象。众所周知,它存在一些问题,并且同样需要付出代价。例如,不建议跟踪大量数据。

当我不得不在 LINQ 和 LINQ 之间做出选择时,QueryExpression我仍然倾向于后者。当您需要查询CRM时,它是最轻量级的技术,并且借助一些扩展方法,编程体验还可以。

(注:CRM 2016 添加了使用 Web API 的新查询方法。)