Entity Framework'de Twitter gibi veri dizme

berkorn (5) 10 yıl önce sordu

Merhaba arkadaşlar, twitterdaki gibi takip edilenlerin son girdiklerini listelemeye çalışıyorum ama kafam karıştı. İlk önce kaç takipçisi olduğunu şu kod ile çekiyordum:

 var kayitlar = (from u in Db.Takip
                            where uyeId == u.UyeId
                            select new NTakip
                            {
                                TakipId = u.TakipId,
                                TakipEdilenId = u.TakipId
                            }).ToList();

Bu kod bana takip edilenleri veriyordu ben burada bu takip edilenleri alıp:

var kayit = (from u in Db.Yorum.OrderByDescending(u => u.YorumId).Where(u => u.Onay == true).Where(u => u.UyeId == kayitlar[0].TakipEdilenId).Skip(sayfa * 50).Take(50)
                       select new NYorum
                       {
                           YorumId = u.YorumId,
                           UyeId = u.UyeId,
                           Yorumu = u.Yorumu,
                           Tarih = u.Tarih,
                           IpAdres = u.IpAdres,
                           Onay = u.Onay,
                           UyeAdi = u.Uye.UyeAdi
                       }).ToList();


Şurada araya sıkıştırdım ".Where(u => u.UyeId == kayitlar[0].TakipEdilenId)" bunun orda [0] la ilk kaydı alınmamış hali gibi hepsini dizip son 50sini almak istiyorum. Karışık anlattım galiba, kısa olarak twitterdaki gibi takipçileri dizip sonra bunların attığı YorumId sine göre 50şerli olarak dizmek istiyordum ama kullanıcıları birleştirip yorumId lerini alma kısmında kafam çok karıştı, nasıl yapabilirim acaba?

alattin 10 yıl önce

cevabı güncelledim. umarım bu sefer doğru anlamışımdır :)

Toplam 1 cevap


alattin (17125) 10 yıl önce cevapladı

Şimdi sorunuzu tekrar okudum. İstediğinizi şu şekilde anlıyorum:

Kullanıcıların takip ettikleri kişilerin girmiş oldukları son 50 yorumu listelemek istiyorsunuz.

İlk okuduğumda takip edilenlerin yazmış oldukları son 50 yorum olarak algıladım. Siz sanırım sadece toplamda son 50 kaydı almak istiyorsunuz.

int uyeId=1; 
var y = (from _y in db.Yorum
                     where  db.Takip.Where(t=> t.UyeId==uyeId).Select(t => t.TakipEdilenId).Contains(_y.UyeId) 
                     select _y).OrderByDescending(t => t.Tarih).Take(50);   

Yukarıdaki ifade kullanıcıların takip listesinde olan diğer kullanıcıların girmiş oldukları son 50 kaydı getirir.
Sql sunucuda şu sorguyu çalıştırıcaktır.

SELECT TOP (5) 
[Extent1].[YorumId] AS [YorumId], 
[Extent1].[UyeId] AS [UyeId], 
[Extent1].[Yorumu] AS [Yorumu], 
[Extent1].[Tarih] AS [Tarih]
FROM [dbo].[Yorums] AS [Extent1]
WHERE  EXISTS (SELECT 
	1 AS [C1]
	FROM [dbo].[Takips] AS [Extent2]
	WHERE (1 = [Extent2].[UyeId]) AND ([Extent2].[TakipEdilenId] = [Extent1].[UyeId])
)
ORDER BY [Extent1].[Tarih] DESC
go

Seçim kriteri olarak siz istediğiniz verileri belirterek performansını iyileştirebilirsiniz.

berkorn 10 yıl önce

Cevap için çok teşekkürler tam istediğim gibi oldu. :)