いくつかのエンティティをクエリし、条件に一致するエンティティを取得する必要があるアプリケーションがあります。これが最初に行われたことでした。異なる基準値で何度も何度も呼び出す必要がありますが、これは悪いことです。往復時間がパフォーマンスを著しく低下させているからです。
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;
}
このアプローチに代わるより良い方法はありますか? すべてを取得し、それらを HashTable/Dictionary に格納し、criteriaValue をキーとして使用しますか? 提案があればぜひ聞きたいです。
どうぞよろしくお願いいたします。