LINQ для SQL запросов системы тегов - токси - PullRequest
0 голосов
/ 24 января 2012

Я установил систему тегов

Я считаю, что это решение "Toxi" со следующими таблицами:

Книги [id, author, title] имеет отношение «многие ко многим» с

Теги [id, tagName]

BookHasTag [id, bookId, tagId] junction-table

с использованием linq-sql Я хочу:

  • выбрать 20 самых популярных тегов и подсчитать их количество
  • с указанием идентификатора книги, получить всю информацию о книге, включая теги, связанные с ней
  • список всех книг, связанных с конкретным тегом

Пожалуйста,Можете ли вы помочь, я знаю, что это немного дерзко, и я знаю, ТАК, как правило, нравится видеть, что вы приложили усилия, но ради краткости я опускаю свои неудачные попытки.

1 Ответ

1 голос
/ 25 января 2012

Если я правильно вас понял, вы хотите что-то вроде этого:

выберите 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...