Many to Many İlişkisinde LinQ Sorgusu

Literary.

Megapat
Katılım
6 Ağustos 2014
Mesajlar
460
Çözümler
1
Daha fazla  
Cinsiyet
Erkek


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?
 
Entity Framework mü kullanıyorsunuz?
Evet, kodlardan bariz olarak açık.

C#:
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.
 
Ben emin olup atmak istemiştim. Benden hızlısınız
 

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
 
Ne hatası aldın?

O zaman şöyle çalış.

C#:
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();
 
var filmIdList = db.Categories.Where(x => x.Id == CategoryId).Select(x => x.MoviesCategories.FilmId).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ı.
 
Çünkü adı MoviesCategories değil MovieCategories. Veri tabanında ve Context'inde değiştireceğin bir şey yok.

Sana yazımımı kontrol et dedim. Elle yazıyorum.
 
Çünkü adı MoviesCategories değil MovieCategories. Veri tabanında ve Context'inde değiştireceğin bir şey yok.

Sana yazımımı kontrol et dedim. Elle yazıyorum.


Hocam anlatamıyorum sanırım. MovieCategories'in üzerinden bir şeye ulaşamıyorum. FilmId falan çıkmıyor hata veriyor.
 
Eki Görüntüle 743151

Hocam anlatamıyorum sanırım. MovieCategories'in üzerinden bir şeye ulaşamıyorum. FilmId falan çıkmıyor hata veriyor.
C#:
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();
 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…