0

EntityCollection を Dictionary に変換またはコピーしたいと考えています。私のコードは以下です。あわせてご提案ください。

Dictionary<string, string> dictionary = new Dictionary<string, string>();
EntityCollection contentCollection = orgService.RetrieveMultiple(new FetchExpression(contentQuery));

if (contentCollection != null && contentCollection.Entities != null && contentCollection.Entities.Count > 0)
{
    foreach (Entity contents in contentCollection.Entities)
    {
        dictionary.Add(content.Attributes(0).key,content.Attributes(0).value );
    }
}
4

2 に答える 2

1

次のように短くすることができます。

EntityCollection contentCollection = orgService.RetrieveMultiple(new FetchExpression(contentQuery));
Dictionary<Guid, Entity> dictionary = contentCollection.Entities.ToDictionary(entity => entity.Id);

メソッドは常に null 以外の値を返すか、例外のスローに失敗するため、チェックcontentCollectionもそのEntitiesコレクションも必要ありません。RetrieveMultiple

または、1 つのステートメントとして記述することもできます。

var dictionary = orgService
    .RetrieveMultiple(new FetchExpression(contentQuery))
    .Entities
    .ToDictionary(entity => entity.Id);
于 2016-01-11T20:52:43.187 に答える
0

私はこれをもう少し簡潔にすることができるオープンソースプロジェクトを持っています:

var dictionary = orgService
    .GetEntities<Entity>(new FetchExpression(contentQuery)
    .ToDictionary(e => e.Id);

GitHub からダウンロードできます: https://github.com/daryllabar/XrmUnitTest (DLaB.Xrm ライブラリを参照) または NuGet:Install-Package DLaB.Xrm -Version 1.0.1

Get Entities は Retrieve を処理し、リスト (レイト バウンドの場合) またはリスト (またはアーリー バウンドの場合に取得する任意の型) を返します。

于 2016-01-12T12:54:54.437 に答える