gpt4 book ai didi

c# - Crm 2011 实体集合查询和性能问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:07 27 4
gpt4 key购买 nike

我有一个应用程序需要查询一些实体并获得符合条件的实体。这是要做的第一件事。它需要使用不同的 criteriaValues 多次调用,这很糟糕,因为往返时间会严重降低性能。

private AnEntity GetEntity(string criteriaValue, IOrganizationService service)
{
QueryExpression query = new QueryExpression();
query.EntityName = "entityname";
query.ColumnSet = new ColumnSet(new string[] { "desiredField1", "desiredField2" });
query.Criteria = new FilterExpression();
query.Criteria.FilterOperator = LogicalOperator.And;
query.Criteria.Conditions.Add(new ConditionExpression("criteriaField", ConditionOperator.Equal, criteriaValue));
EntityCollection entities = service.RetrieveMultiple(query);
if (entities.Entities.Count > 0)
{
return (AnEntity)entities[0];
}
return null;
}

现在我正在考虑在应用程序启动时检索所有实体一次,并在 EntityCollection 上使用 LINQ 查询,就像这样。

private AnEntity GetEntity(string criteriaValue, EntityCollection theEntityCollection)
{
var desiredEntity = from e in theEntityCollection.Entities
where e.criteriaField.Equals(criteriaValue)
select e;
return (AnEntity)desiredEntity;
}

除了这种方法,还有更好的替代方法吗?比如检索所有内容,将它们存储在哈希表/字典中并使用 criteriaValue 作为键?我很想听听任何建议。

非常感谢您的指导。

最佳答案

由于您只返回一条记录,因此您需要做的第一件事就是将计数设为 1。默认情况下,CRM 将返回与计数匹配的前 5000 条记录。

这是指定您只想返回第一项的代码:

query.PageInfo.Count = 1; // Number of records to return
query.PageInfo.PageNumber = 1; // Page count.

如果这不能将性能提高到可接受的水平,检索所有实体并将它们存储为字典也是一种有效的方法。请记住,数据可能会过时...

关于c# - Crm 2011 实体集合查询和性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15874086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com