2016-10-20 10 views
0

このPersonテーブルの中から複数の列を取得しようとしています。しかし、私は1つのプロパティ(Address)を取得することしかできないようです。なぜ私はここで複数の選択をすることができないのですか? テーブルの列に対して複数の選択を行うことはできません

largeThings = DbContext.Set<Things>() 
       .Where(ep => ep.CreatedDate > dateTimeYesterday) 
       .Include(ep => ep.People 

        .Select(p => p.Person) 
        .Select(p => p.Address)).ToList(); 

は、私のような匿名のオブジェクトを使用しようとしました:

largeThings= DbContext.Set<Episode>() 
       .Where(ep => ep.CreatedDate > dateTimeYesterday) 
       .Include(ep => ep.People 
        .Select(p => p.Person) 
        .Select(p => new { p.Address, p.FirstName })).ToList(); 

しかし、これは、ナビゲーションプロパティのエラーをスローします。ここで複数の列を選択できる他の方法はありますか?

このPersonテーブルからFirstNameAddressの両方を取得したいと思います。

+0

私はThingsクラスとPeopleクラス間の1対1の関係があることを理解したように、したがって、次のコードを見てください。 2回目の試行から正確なエラーを表示してください –

+0

最初の例では、私は 'Person'からnotherカラムを取得するためにselectを追加したいと思います。私が別のセレクトを追加すると、それは私が欲しくないオブジェクトの中に深く入るだけです。 –

+0

'インクルードパス式は、そのタイプで定義されたナビゲーションプロパティを参照する必要があります。参照ナビゲーションのプロパティには点線のパスを使用し、コレクションのナビゲーションプロパティにはSelect演算子を使用してください。 –

答えて

0

Includeを使用して、他のテーブルからいくつかの列を取得することはできません。それらをすべて取得するか、カスタムセレクトを使用して必要なデータだけを取得する必要があります。

largeThings = DbContext.Set<Things>() 
       .Where(ep => ep.CreatedDate > dateTimeYesterday) 
       .Select(ep => new {ep, ep.People.Select(p => new {p.Person, p.Address})}); 
0

Includeの目的は、クエリ結果にオブジェクト全体を含めることです。あなただけのアドレスを選択するためにあなたがアドレスを取得

largeThings = DbContext.Set<Things>() 
    .Where(ep => ep.CreatedDate > dateTimeYesterday) 
    .Select(ep => new 
     { 
      ep.People.Person, 
      ep.People.Address 
     }).ToList(); 
関連する問題