Entity Framework'de Twitter gibi veri dizme

0

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?

berkorn berkorn (5)
10 yıl önce sordu

  • cevabı güncelledim. umarım bu sefer doğru anlamışımdır :) alattin 10 yıl önce

Toplam 1 Cevap


0

Ş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.

alattin alattin (16984)
10 yıl önce cevaplandı

  • Cevap için çok teşekkürler tam istediğim gibi oldu. :) berkorn 10 yıl önce
üyelik gerektirir

Cevap yazabilmek için üye girişi yapmalısınız.

Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol