Arkadaşla, ASP üzerinde tablolarım bu şekilde. Veritabanıyla bağlantıları falan hallettim hiçbir sıkıntı yok.
Yapmak istediğim sorgu şu: Örneğin 1 numaralı kategoriye ait filmleri sorgulayarak view üzerine göndermek. Ama bunun sorgusunu nasıl yazacağımı bulamadım. Benim mantığıma göre filmlerden moviecategories'a ulaşıp ondan da CategoryId==1 olan kayıtları seçmek. Lakin bunu yapamadım. Nasıl yapacağım?
var category = db.MovieCategories.Where(c => c.CategoryId == CategoryId).FirstOrDefault();
var movies = db.Films.Where(f => f.MovieCategories.Contains(category)).ToList();
Bunu dene. Film nesnesine ait "MovieCategories" parametren bir liste. O yüzden bu şekilde erişmen gerek.
var category = db.MovieCategories.Where(c => c.CategoryId == CategoryId).FirstOrDefault();
var movies = db.Films.Where(f => f.MovieCategories.Contains(category)).ToList();
Bunu dene. Film nesnesine ait "MovieCategories" parametren bir liste. O yüzden bu şekilde erişmen gerek.
var category = db.MovieCategories.Where(c => c.CategoryId == CategoryId).FirstOrDefault();
var movies = db.Films.Where(f => f.MovieCategories.Contains(category)).ToList();
Bunu dene. Film nesnesine ait "MovieCategories" parametren bir liste. O yüzden bu şekilde erişmen gerek.
Movie categories tablosuna direkt erişemiyorum. Hocamız bize öğretirken db context kısmına MovieCategories'i eklemeyin zaten kategori veya filmlerden ulaşabilirsiniz demişti. Başka bir yolu var mı?
Edit: Ayrıca kodu denememe rağmen çalışmadı hata veriyor
var filmIdList = db.Categories.Where(x => x.Id == CategoryId).Select(x => x.MoviesCategories.FilmId).ToList();
/*Bu sana filmlerin İdlerini verecek.
Sonra filmlerden alırsın. Ben elle yazıyorum syntax hatası olabilir. O yüzden kontrol et.*/
var movies = db.Movies.Where(x => filmIdList.Contains(x.Id)).ToList();
Hocam hata böyle. Hatanın sebebi şu: Context üzerinde MoviesCategories yok. Öğreten hocamız da bunu contexte eklemeyin diğer tablolardan erişip sorgularınızı yazabilirsiniz demişti.
Context bu. Yani x.MoviesCategories'e ulaşılamıyor.
Ayrıca Context üzerine MovieCategories'i ekledim yine de sorgu hata verdi. Bunun başka bir yolu olmalı.
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();
Bunu dene bakalım. Ayrıca böyle bir erişim için MovieCategories sınıfını contexte eklersen daha kolay erişirsin. O zaman da şu şekilde olur.
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();