0

AutoMapper でリストのマッピング中に特定のプロパティを無視することは可能ですか? たとえば、Metadata と MetadataInput の 2 つのクラスがあります。

どちらも追加のフィールドを持つ宛先「MetadataInput」を除いて同じフィールドを持ちます。

Mapper.CreateMap <IList<Metadata>, IList<MetadataInput>>()

formember オプションを使用しようとしましたが、おそらくリストをマップするときにプロパティを使用できないため、エラーが発生しますか? はいの場合、代替ソリューションはありますか?

4

4 に答える 4

3

Darin Dimitrov が示唆したように、リストやコレクションをマップしようとすべきではありません。

それらすべての間に 1 -> 1 の関係がある場合は、次のようなマップを作成します。

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore());

次に、リストを使用して、それを他のリストに選択できます。

var metadataList = new List<Metadata>();

var meatadataInputList = metadataList.Select(p => Mapper.Map<MetadataInput>(p).ToList();
于 2013-10-16T15:12:24.847 に答える
0

有益なコメントをありがとう。両方のリストはマッピング前に既に作成されているため、次のようにしました。

データベースからリストを取得します:

List<Metadata> metadatas = _Metadataservice.GetList(_Collectionservice.Get("Koekelare").ID).ToList();

マッパーを作成します (私の間違いを指摘してくれてありがとう):

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore());

新しいリストを作成し、新しい (単一の) 値を 1 つずつマップします。

List<MetadataInput> meta = new List<MetadataInput>();
for (int i = 0; i < e.Count; i++)
{
  meta.Add(Mapper.Map<Metadata, MetadataInput>(metadatas[i], input.Metadatas[i]));
}

誰かがこれが良い方法であることを確認できますか?

于 2013-10-16T16:51:36.923 に答える