2016-06-17 3 views
0

私のモデルにICollection Actorsがあります。俳優の名前はparamです。 名前が選択されたActorを持つムービーを選択します。ボタンでSearchActor文字列、ICollectionエンティティでの検索

namespace AEXSoft.Models 
{ 
    public class Movie 
    { 
    public int MovieID { get; set; } 
    public string Title { get; set; } 
    public string Date { get; set; } 
    public int Budget { get; set; } 
    public string Genre { get; set; } 
    public virtual ICollection<Actor> Actors { get; set; } 
} 

}ムービーコントローラで

は私が作ったクエリ

if (!String.IsNullOrEmpty(SearchActor)) 
       { 
        Movie = Movie.Where(c => Actors.Name.Contains(c.Actors.SearchActor)); 
       } 
return View(Movie.ToList()); 

*

'ICollectionを' '名前' の定義が含まれていませんし、いいえ 拡張メソッド '名前'タイプの第1引数を受け入れる 'ICollection 'これは正しいのだろうか?

*

、同じタスクが、すべての俳優をsearcging。

Movie=ctx.Movie.Where(s => s.Actors.Contains(SearchActor)).SelectMany(u => u.Actors).ToList(); 
+1

をfirsrクエリはすなわち映画のリストを返します。選択された俳優と(そしてただ一つではなく)をリストします。あなたはそれを望みますか? 2番目は映画と同じですが、1つだけの場合は.FirstOrDefault()を使用してください。 –

+0

はい、選択した俳優の映画のリストが必要です。これは当てはまりますが、特定の映画を特定の俳優で検索するためにクエリをどのように書き込むことができるかについての別の質問があります。 – ifooi

+0

後で自分のコードをテストします – ifooi

答えて

1

あなたはその

var movieList = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor))).ToList() 
+0

はい。できます。しかし、私はそれを{Movie = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor)));}に戻して、View(Movie.ToList())を返します。 – ifooi

1

ファーストのような何かをしたい、あなたは正しくようなラムダ・メソッドを使用する必要があります。.Where(C => c.Actorsを...) 第二に、ここにc.Actors.SearchActorあなたはリスト上のプロパティSearchActorにアクセスしようとしています。明らかに何もありません。

代わりにこれを試してみてください:

var SearchActor = "Arnold"; 

if (!String.IsNullOrEmpty(SearchActor)) 
{ 
    var allMovies = Movie.Where(m => m.Actors.Any(a => a.Name.Contains(SearchActor))).ToList(); 
} 
+0

Fine。私は学ぶだろう。ありがとう! – ifooi

関連する問題