Saya memiliki dua tabel "POSTS" dan "COMMENTS". Satu postingan dapat memiliki banyak komentar dan saya ingin dapat memilih 10 postingan teratas dengan jumlah komentar terbanyak. Post_id adalah sebuah FK dalam tabel komentar. Saya menggunakan Linq ke SQL. Mohon sarannya bagaimana cara melakukan hal ini. Terima kasih sebelumnya.
EDIT
var top = (from q in db.question_tables
from a in db.answer_tables
where q.QUEST_ID.Equals(a.ANS_QUEST_ID)
orderby q.QUEST_TEXT.Count() descending
select new
{
QUEST_TEXT = q.QUEST_TEXT
}).Take(10);
seperti inilah tampilan kueri linq saya sekarang, yang memberikan kesalahan "Operator urutan tidak didukung untuk tipe 'System.String'. ". :/
Pesan kesalahan tersebut disebabkan karena Anda memanggil .Count()
pada properti string (QUEST_TEXT
). Hal itu dikompilasi karena string dapat dihitung. Namun, Linq-to-SQL tidak memahami hal ini.
Jika Anda memiliki hubungan antara dua tabel yang dipetakan dalam file DBMS Anda, maka Anda dapat menggunakannya dalam ekspresi Anda:
var top = (from q in db.question_tables
orderby q.answers.Count() descending
select q).Take(10);
Namun kode yang Anda posting tidak sesuai dengan deskripsi yang Anda berikan. Anda menyebutkan komentar, tetapi kode tersebut berbicara tentang jawaban.
Gabungkan Posts
dan Comments
, urutkan berdasarkan Post.Comment
menghitung menurun dan ambil 10 teratas.
(from p in Posts
from c in Comments
where c.PostId == p.Id
orderby p.Comments.Count() descending
select p).Take(10);
Dari pengeditan Anda, sepertinya Anda mencoba mencari pertanyaan dengan nilai QUEST_TEXT terpanjang. Jika itu yang Anda butuhkan, ubah saja kode Anda menjadi orderby q.QUEST_TEXT.Length descending
, tetapi itu tidak terdengar seperti yang Anda tanyakan.