2016-05-01 8 views
1

Entity Frameowrk 7を使用していて、データ転送オブジェクト(DTO)にデータを選択するためのLINQクエリがあります。ナビゲーションプロパティからデータを選択するには、Includeを使用して、指定されたプロパティを熱心に読み込むことができます。テーブルには、現在2つの行を持っていますが、そのうちの一つだけが、次のクエリに応答して返されます。LINQナビゲーションプロパティがnullの場合、行をスキップします。

var jobs = context.CorepJobs 
      .Include(j => j.CompanyNavigation) 
      .Include(j => j.WellNavigation.FieldNavigation) 
      .Select(j => 
       new CorepJobDTO() 
       { 
        Id = j.Id, 
        Created = j.Created, 
        DepthAsFeet = j.DepthAsFeet, 
        JobType = j.JobType, 
        State = j.State, 
        ProjectNo = j.ProjectNo, 
        CompanyName = j.CompanyNavigation.CompanyName, 
        WellName = j.WellNavigation.Name, 
        FieldName = j.WellNavigation.FieldNavigation.Name 
       } 
      ).AsEnumerable(); 

いくつかのプロパティがnullをしている場合、私はクエリがnullとDTOの対応するプロパティを設定するために期待されます。その代わりに、FieldNavigationプロパティがnullの場合、行全体がスキップされ、2つの行のうちの1つのみが返されます。 Selectブロックの最後のプロパティ(FieldName)を削除すると、両方の行が返されます。

私はまた、任意の運なし

FieldName = j.WellNavigation.FieldNavigation != null =? j.WellNavigation.FieldNavigation.Name : "" 

を試してみました。

私が間違っている可能性のあるアイデアはありますか?

+1

https://github.com/aspnet/EntityFramework/issues/3186 –

+0

ニースが見つかりました!そうでなければならない。 –

答えて

0

まず、「FieldName」プロパティのチェックタイプは、nullを受け入れるかどうかに関係なくチェックされます。次に試してみてください

FieldName = j.WellNavigation.FieldNavigation!= null? j.WellNavigation.FieldNavigation.Name:null

+0

'FieldName'は単なる文字列なので、それはヌル入力です。 –

関連する問題