2011-11-21 15 views
5

私はEFでFoo genを作成しましたが、これは1対1であるはずのBarのナビゲーションプロパティを持っています。とにかく、私がFooをクエリすると、Barコレクションの最初と唯一のアイテムを取得し、これらを平坦なBiz Dtoにマッピングすることができます。コレクションの最初のアイテムをAutoMapperでマッピングする方法

 var result = (from c in ctx.Foo 
        where c.Bar.Any(cs => cs.LOGINNAME == username && cs.PASSWORD == password) 
     select c).First(); 

次に、私のAutoMapper設定では、????のようなマップを作成します

public class Foo{ 
public ICollection<Bar> Bars { get; set; } 
} 

ソリューション:

var result = from item in FooCollection 
      select new { FirstBar = item.Bars.FirstOrDefault() }; 

FooCollection is IQueryable<Foo>

使用を

 Mapper.CreateMap<Foo, Biz>() 
      .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.CLIENTID)) 
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Bar.FirstOrDefault???)) 

は、与えられた、 スティーブン

+0

CreateMap呼び出しが正しいように見えます。彼らはあなたのために働いていないのですか? – PatrickSteele

+0

@PatrickSteeleこれは許可されていますか?明らかに、構文をクリーンアップする必要がありますが、はい、フィールド単位でカスタムマッピングを定義することができます:opt.MapFrom(src => src.Bar.FirstOrDefault?) –

+0

(s => s.Bar.FirstOrDefault()); – PatrickSteele

答えて

6

使用FirstOrDefault()あなたはそれをマップBarコレクション上:

opt.MapFrom(src => src.Bar.FirstOrDefault()) 
0

をありがとうFirstOrDefault場合には例外がないように、何の関連バーが

はありませんが、私は考えてそれを行う必要があります...

HTH

+0

私の質問を例文で更新しました。 –

関連する問題