/ / linq to sql запит системи тегів - toxi - c #, sql, linq, linq-to-sql

linq to sql запит до системи тегів - toxi - c #, sql, linq, linq-to-sql

Я створив систему тегів

Я вірю, що це рішення "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();