C# linq到sql查询标记系统-toxi

C# linq到sql查询标记系统-toxi,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,我已经建立了一个标签系统 我相信它是“toxi”解决方案,具有以下表格: 书籍[id、作者、标题]与 标记[id,标记名] BookHasTag[id,bookId,tagId]连接表 使用linq sql,我希望: 选择前20名最受欢迎的标签,并将其计数 给定图书id,获取有关图书的所有信息,包括与之关联的标签 与特定标记关联的所有书籍的列表 请你帮个忙,我知道这有点厚颜无耻,我知道我通常很想看到你做出了努力,但为了简单起见,我不想说我失败的尝试 如果我理解你是对的,你想要这样的东西: 选

我已经建立了一个标签系统

我相信它是“toxi”解决方案,具有以下表格:

书籍[id、作者、标题]与

标记[id,标记名]

BookHasTag[id,bookId,tagId]连接表

使用linq sql,我希望:

  • 选择前20名最受欢迎的标签,并将其计数
  • 给定图书id,获取有关图书的所有信息,包括与之关联的标签
  • 与特定标记关联的所有书籍的列表

请你帮个忙,我知道这有点厚颜无耻,我知道我通常很想看到你做出了努力,但为了简单起见,我不想说我失败的尝试

如果我理解你是对的,你想要这样的东西:

选择前20名最受欢迎的标签,并将其计数

给定图书id,获取有关图书的所有信息,包括与之关联的标签

与特定标记关联的所有书籍的列表


你的班级模型是什么样子的?换句话说,你是否有一个
Book
类和一个
Tags
属性返回一个
Tag
-对象列表,反之亦然,你是否有一个
Tag
类和一个
Books
属性返回一个
Book
-对象列表,Tag类有BookHasTagI建议您包含代码的相关部分。这使得想出一个解决方案变得容易多了……好极了,这真是一件乐事。谢谢你的帮助。我可以问一下吗?每个数据库是否只运行一个针对db的查询?是的,它们会。如果要查看sql语句,请使用linqpad转换linq代码。也许你可以接受这个答案?
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();