Я створив систему тегів
Я вірю, що це рішення "toxi" з наступними таблицями:
Книги[ідентифікатор, автор, назва] має багато-до-багато стосунків
Теги[id, tagName]
BookHasTag[id, bookId, tagId] розв'язка-стіл
використовуючи linq-sql, я хочу:
- виберіть топ-20 найпопулярніших тегів і порахуйте їх
- отримавши ідентифікатор книги, отримайте всю інформацію про книгу, включаючи пов’язані з нею теги
- список усіх книг, які пов’язані з певним тегом
Допоможіть, будь ласка, я знаю, що це трохи нахабно, і я знаю, що звичайно люблю бачити, що ви доклали зусиль, але заради стислості я залишаю свої невдалі спроби.
Відповіді:
1 для відповіді № 1Якщо я зрозумів, що ви правильно, ви хочете щось подібне:
виберіть топ-20 найпопулярніших тегів і порахуйте їх
var lsTags=(
from tag in db.Tags
select new
{
tag.id,
tag.tagName,
NbrOfTags=
(
from hasTags in db.BookHasTag
where hasTags.tagId==tag.id
select hasTags.id
).Count()
}
).OrderByDescending(a=>a.NbrOfTags).Take(20).ToList();
отримавши ідентифікатор книги, отримайте всю інформацію про книгу, включаючи пов’язані з нею теги
var bookId=1;
var lsBooksWithTags=(
from book in db.Books
where book.id==bookId
select new
{
book.id,
book.author,
book.title,
Tags=(
from bookHasTag in db.BookHasTag
join tags in db.Tags
on bookHasTag.tagId equals tags.id
where bookHasTag.bookId==book.id
select new
{
tags.id,
tags.tagName
}
)
}
).ToList();
список усіх книг, які пов’язані з певним тегом
var tagId=1;
var lsBooksByTagId=(
from book in db.Books
where
(
db.BookHasTag.Where(a=>a.tagId==tagId).Select(a=>a.bookId)
).Contains(book.id)
select new
{
book.id,
book.author,
book.title
}
).ToList();