2010-12-28 10 views
0

私はC#とEF 4を使用しています。私はActorのリポジトリを持っています。エンティティのActorはMovieと多対多の関係を持っています。 したがって、ActorReposityでは、給与が100を上回るメソッドGetActorsを取得したいと思います。その結果、この俳優の監督がDoeである映画を含めることもできます(監督は、ムービー) 私がリポジトリに持っているメソッドの署名はIQueryable GetActors()です。この場合、私はsignitureを単純化しています。その後、これを動作させた後、リファクタリングでパラメータを渡すことができます。選択に基づいて関連エンティティを取得するためのきれいな方法

答えて

0
public class ActorRepository  
    { 
     public List<Actor> GetActors(int minimumSalary, string directorName) 
     { 
      return _ctx.Actors 
        .Include("Movies") 
        .Where(x => x.Salary > minimumSalary) 
        .Select(x => new 
          { 
           Actor = x, 
           Movies = x.Movies.Where(y => y.DirectorName == directorName) 
          }) 
        .ToList() 
        .Select(x => new Actor 
        { 
         // copy scalar properties from anon to Actor, e.g: 
         ActorName = x.ActorName, 
         // then set the Movies navigational property to the filtered type 
         Movies = x.Movies 
        }).ToList() 

     } 
    } 
+0

こんにちは!それはかなり期待された結果を返さなかった、それはすべてのディレクターの名前を返す。最後のステートメントが正しく動作していないように見える。 Thankx – user282807

+0

@ user282807 - 映画の* all *がそのディレクターになるようにしたい場合は、 '.Any'を' .All'に変更してください。それでもあなたが望むものでないなら、おそらくあなたの質問に言い直してください。 – RPM1984

+0

ムービーはactorのcolllectionプロパティです。x.Movies.Directorはありません。x => x.Movies.Any(p => p.Name == "foo")これはコレクションをフィルタリングしません。名前だけの映画監督を持っている映画を入手するのではなく、Atcorsとすべての映画を入手してください。 – user282807

関連する問題