Направих система за маркиране
Мисля, че това е "токси" решение със следните таблици:
Книги[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();