1

以下のようなlinQクエリがあります

 var records = (from P in Person
                join B in BankAccount
                on P.ID equals B.PersonID
                select new { P, B}).ToList();

個人テーブルには多くのフィールドがありますが、IDと名前のみを操作する必要があります。同様に、BankAccountの場合、ID、AccountType、およびAccountBalanceのみを操作する必要があります。

次に、上記のようなレコード変数タイプを、次のようなメソッドを使用して別のマッパークラスに渡します。

    public List<CompositeDTO> MapToDto(IEnumerable<object> data)
    {
        foreach (var rec in data) 
        {
         dto.InjectFrom(rec );
         dtoList.Add(dto);
        }
        return dtoList;
    }

CompositeDTOは以下のとおりです

public class CompositeDTO 
{
  public int PersonID {get; set;}
  public String PersonName {get; set;}
  public int AccountID {get; set;}
  public String AccountType{get; set;}
  public int AccountBalance{get; set;}
}

CompositeDTO問題は、を使用してタイプのオブジェクトに値を取得できないことです。dto.InjectFrom(rec )

これはどのように行う必要がありますか?ここのドキュメントは、2つの異なるソースクラスからの1つのフィールドに対してそれを行う方法のみを説明しました。私は何かを逃したことがありますか?これはできますか?

4

3 に答える 3

0

このスレッドで読んだように、AutoMapperとValueInjecter

ValueInjecterを使用して、匿名オブジェクトおよび動的オブジェクトからマップすることもできます

そして、AFAIKは、利用可能でなければならない慣例によって、カスタムマッピングを宣言せずに実行する必要があります。ドキュメントをチェックアウトします。

于 2012-12-02T16:06:52.333 に答える
0

ソースからプロパティを取得し、target.InjectFrom(source)それらをターゲットに挿入しますNameType

したがって、あなたの場合、ソースは匿名です

 {
   public Person P { get; set; }
   public BankAccount B { get; set; } 
 }

また、ターゲットのCompositeDTOには、PersonおよびBankAccountタイプのPまたはBという名前のプロパティがないため、一致するものはありません。


うまくいくものの例:

var source = new { PersonID = 7, PersonName = "Jon" };

var target = new CompositeDTO();

target.InjectFrom(source);
于 2012-12-03T09:35:06.987 に答える
0

AutoMapperはここでよりうまく機能すると思います。以下のようにAutoMapperを使用してマップメソッドを変更しましたが、機能しました

public List<CompositeDTO> MapToDto(IEnumerable<object> data)
{
     dtoList = data.Select(Mapper.DynamicMap<CompositeDTO>).ToList();

    //foreach (var rec in data) 
    //{
    // dto.InjectFrom(rec );
    // dtoList.Add(dto);
    //}
    return dtoList;
}

私がする必要があるのは、linQクエリで使用したエイリアスをCompositeDTO'sプロパティP_PersonIDに追加することだけでした。B_AccountType

ValueInjecterはこの機能の追加に取り組むべきだと思います。現在AutoMapperで非動的タイプに対して行われているように、マップを使用する前にマップを作成する必要がないのが本当に好きです。現在、コードで2つの異なるオブジェクトマッパーを使用しています。それは悪いですか?

于 2012-12-16T16:22:36.470 に答える