var categoryList = db.Categories.Where(x => x.Id == CategoryId).ToList(); var filmIdList = new List<int>(); foreach (var category in categoryList){ var movieCategories = categoryList.MovieCategories; var categoryMovieIdList = movieCategories.Select(x => x.FilmId).ToList(); filmIdList.AddRange(categoryMovieIdList); } var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
Ben sıkıntı yaşamadan ulaşıyorum. Önceki mesajımı tekrar oku bir şey yazdım. Kodu yanlış yazmışım. Düzgün hali bu.Eki Görüntüle 743201
Yok hocam yine hata veriyor. MovieCategories'e ulaşılamıyor. Sen çoka çok tablolarla uğraşırken ulaşabiliyor muydun bu kodlarla? Acaba benim projemde mi bir sorun var? Yoksa başka bir yolu mu var bunun?
var categoryList = db.Categories.Where(x => x.Id == CategoryId).ToList();
var filmIdList = new List<int>();
foreach (var category in categoryList){
var movieCategories = category.MovieCategories;
var categoryMovieIdList = movieCategories.Select(x => x.FilmId).ToList();
filmIdList.AddRange(categoryMovieIdList);
}
var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
var categoryList = db.Categories.Where(x => x.Id == CategoryId).ToList(); var filmIdList = new List<int>(); foreach (var category in categoryList){ var movieCategories = category.MovieCategories; var categoryMovieIdList = movieCategories.Select(x => x.FilmId).ToList(); filmIdList.AddRange(categoryMovieIdList); } var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
Bence tablo yapinda cok hata var.
- Category ve MovieCategory ayni sey.
- MovieCategory hem categoryId hem de Category tutuyor. Film tutmasina gerek yok.
- List<> yerine set kullanmalisin, duplike kategori olmamasi adina.
- Film yazdiysan FilmKategorisi yap diger tablonun adini, ya full Turkce ya da full Ingilizce devam et.
Bence yol yakinken tablo yapisini degistir. Soyle bir sey:
Movie
- name,desc, id vs
- set<MovieCategory>
MovieCategory
- id
- name
- description
3 tane tablo olusturacak framework bu yapidan.
Hata veren satırı aşağıdaki gibi yap bakalım. Projeyi atarsan sana daha düzgün hale getirebilirim. Bu şekilde hataları görmeden yapmak çok zor.Hocam çoka çok ilişki olduğu için MovieCategory tablosu var. Category ve MovieCategory aynı şey değil. Bir film birden fazla kategoriye ait olacağı için ve bir kategoride birden fazla film olacağı için böyle bir tablo yapısı kurdum.
var categoryMovieIdList = movieCategories.Select(x => x.FilmId).ToList();
var filmIdList = db.MovieCategories.Where(x => x.CategoryId == id).Select(x => x.FilmId).ToList();
var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
Evet dusuncen dogru. Iliskileri tutmak icin 3. bir tabloya ihtiyacin var. Ama bunu sen degil EntityFramework olusturmali. Sen uygulamanda SQL gibi degil "Entity" gibi dusunmelisin.Hocam çoka çok ilişki olduğu için MovieCategory tablosu var. Category ve MovieCategory aynı şey değil. Bir film birden fazla kategoriye ait olacağı için ve bir kategoride birden fazla film olacağı için böyle bir tablo yapısı kurdum.
Hata veren satırı aşağıdaki gibi yap bakalım. Projeyi atarsan sana daha düzgün hale getirebilirim. Bu şekilde hataları görmeden yapmak çok zor.
C#:var categoryMovieIdList = movieCategories.Select(x => x.FilmId).ToList();
Ayrıca MovieCategories sınıfını contexte eklediysen aşağıdaki gibi yap. Bunu mutlaka dene.
C#:var filmIdList = db.MovieCategories.Where(x => x.CategoryId == id).Select(x => x.FilmId).ToList(); var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
Ayrıca MovieCategories sınıfını contexte eklediysen aşağıdaki gibi yap. Bunu mutlaka dene.
C#:var filmIdList = db.MovieCategories.Where(x => x.CategoryId == id).Select(x => x.FilmId).ToList(); var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();