/ / linq to sql запитване към система за тагове - toxi - c #, sql, linq, linq-to-sql

linq към sql запитване към система за тагове - toxi - c #, sql, linq, linq-to-sql

Направих система за маркиране

Мисля, че това е "токси" решение със следните таблици:

Книги[id, автор, заглавие] има много отношения с много

Tags[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();