1

List<my_custom_object>共通の列に基づいて、IQueryable<T>と の間の一致するプロパティを抽出して、新しい を生成する必要があるシナリオがありDictionary<String, String>ます。

これが私の辞書です:

DirectoryProfilePropertiesCollection = (Dictionary<String, String>)ApiMethods.GetProfileProperties(OrganizationIdentifier, DirectoryIdentifier, DirectoryUserName, DirectoryUserPassword);

これにより、次の情報が返されます。

Key: samAccountName, Value: hgulzar 
Key: sn,             Value: Hassan
Key: lastname,       Value: Gulzar

ここでのキーは属性名と呼ばれます。

私も持っていますIQueryable

var DirectoryMappingsCollection = repository.GetQuery<OrganizationDirectoryMapping>(where => where.OrganizationDirectory.Organization.OrganizationUnit.UnitIdentifier == OrganizationIdentifier && where.OrganizationDirectory.DirectoryIdentifier == DirectoryIdentifier);

OrganizationDirectoryMappingエンティティには、というプロパティがありますDirectoryAttribute

両方のコレクションには、照合するときにデータがあります。のDirectoryProfilePropertiesCollectionペアにはAttributeNameとがありAttributeValueます。のDirectoryMappingsCollectionエンティティ、OrganizationDirectoryMappingにはAttributeName、 とDetailName

DetailName、、、を表すカスタム クラス オブジェクトを取得する必要がありますDirectoryAttributeAttributeValue

いくつかのクエリを試していましたが、例外が発生したときに行き詰まりました:

Unable to create a constant value of type 'System.Collections.Generic.KeyValuePair`2'. Only primitive types or enumeration types are supported in this context.

質問LinQネストされたコレクションクエリは例外を少し理解しましたが、私はまだ立ち往生しています。

よろしく。

私がこれまでに試したこと:

combinedCol = (from mapCol in DirectoryMappingsCollection
                                                join propCol in DirectoryProfilePropertiesCollection
                                                on mapCol.DirectoryAttribute equals propCol.Key
                                                select new CombinedMappingDataCollection
                                                {
                                                    DetailName = mapCol.DetailRequirement.DetailName,
                                                    AttributeName = propCol.Key,
                                                    AttributeValue = propCol.Value
                                                }).ToList();
4

1 に答える 1